Maix Amigoのカメラ使いたい会
画面、タッチパネル と来て大きな残件はオーディオ入出力とカメラ。。オーディオは一旦あとまわしにしてとりあえずカメラかな。。
Maix Amigoにはスマホのように2台のカメラが表裏についている。裏面が OV7740 、表面が GC0328 と別々で、スペックが微妙に異なる。
K210にはDVPと呼ばれる専用のCamera-in IPがあるので、適当にカメラを設定してそちらに入力するのが目標となる。
そもそもカメラのアドレスが衝突している問題
データシートによると、どちらのカメラもSCCBアドレス的には 0x42
(read側は 0x43
) になっていて衝突してしまっている。試しに適当に読んでみると、 GC0328 側が 0x42
を採れていることが多いようだ(ChipIDレジスタを読んだ結果としては)。
ただ、↓で引かれているサンプルによると、
注意事项: 由于 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バスとして正値を使用していることからわかる。
K210の公式SDKにはタイムアウト付きのi2cドライバが存在しない(!)ので、一旦MaixPyの実装を拾ってくることにする。。
カメラの検出までできた
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