Open4

Maix Amigoのカメラ使いたい会

画面、タッチパネル と来て大きな残件はオーディオ入出力とカメラ。。オーディオは一旦あとまわしにしてとりあえずカメラかな。。

Maix Amigoにはスマホのように2台のカメラが表裏についている。裏面が OV7740 、表面が GC0328 と別々で、スペックが微妙に異なる。

K210にはDVPと呼ばれる専用のCamera-in IPがあるので、適当にカメラを設定してそちらに入力するのが目標となる。

https://github.com/fukuen/maixamigo-dvp-demo

そもそもカメラのアドレスが衝突している問題

データシートによると、どちらのカメラもSCCBアドレス的には 0x42 (read側は 0x43) になっていて衝突してしまっている。試しに適当に読んでみると、 GC0328 側が 0x42 を採れていることが多いようだ(ChipIDレジスタを読んだ結果としては)。

ただ、↓で引かれているサンプルによると、

https://qiita.com/fukuebiz/items/935abb4a487cc5df7b91

注意事项: 由于 Amigo 电源管理电路的设计 需要配置 PMU AXP173 的输出电压, 才可以正常使用摄像头

(DeepL)

注:Amigoの電源管理回路の設計上、カメラが正常に動作するためには、PMU AXP173の出力電圧を設定する必要があります。

つまり、電源を設定しないと不味いらしい。 ... が電源を設定してもダメだった。

どうも GC0328 は PWDNピンを L にした場合にenableできる ようになっていて、OV7740 側はその逆になっているようだ。。確かに、配線図を見ると CAMERA_PWDN# の有無が違っている。

これは PWRON Button と表記されたブロックで生成されている。

じゃぁ本質的にカメラの電源を切る方法が無くない。。?とりあえず OV7740 の方が高機能なので、なんとかしてそちらを機能させる方法を考えたい。

そもそもK210のSCCBを使っていない

どうも GC0328 側であっても通信が安定しないので、MaixPyに一旦戻してそもそもカメラを認識するのか確認してみた。 import sensor して reset すれば良い。

MicroPython v0.6.2-72-g22a8555b5 on 2021-11-01; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> import sensor
>>> sensor.reset()
init i2c:2 freq:100000
[MAIXPY]: find ov7740
[MAIXPY]: find ov sensor
>>> sensor.reset(choice=2)
init i2c:2 freq:100000
[MAIXPY]: sensor id = 9d
[MAIXPY]: find gc0328

i2cで通信してるじゃん! これは init i2c:2 のように、i2cバスとして正値を使用していることからわかる。

https://github.com/sipeed/MaixPy/blob/4fe0efb563f12ce2b2dd92f832ea69fc511b48de/components/micropython/port/src/omv/cambus.c#L47

K210の公式SDKにはタイムアウト付きのi2cドライバが存在しない(!)ので、一旦MaixPyの実装を拾ってくることにする。。

カメラの検出までできた

https://github.com/okuoku/amigotest/commit/2252d81ff11d3c7c6674c308f11faeac48b95228

DVP_PWDN = 1 の時に GC0328 、 0 の時に OV7740 が現われることがわかった。I2Cアドレスは 0x21 に相当する。

GC0328 の場合、Chip IDはレジスタ 0xf0 が 0x9e になっていることで確認できる。

OV7740の場合は、 0x1c 0x1d、0x0a 0x0b の計4バイトを確認する。

addr: 21 = 7f,a2:77,42
ログインするとコメントできます