介面是 i2c。
使用 i2ctool,follow 這一篇: http://boundarydevices.com/i2c-tools-under-android/
到舊版頁面 去download 3.0.2
2019: source 改道這裡了...
git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git -b i2c-tools-3.1解開到 framework 下,
再follow 那一篇,把 Android.mk create 出來。
為了避免 link 不見, copy 了一份在 gist。
OK, build 出來後,在 android 下就可以 run 了。
先用 i2cdetect -l 看一下:
i2c-0 i2c imx-i2c I2C adapter i2c-1 i2c imx-i2c I2C adapter i2c-2 i2c imx-i2c I2C adapter
有出現 3 個 i2c bus 。
ADV7611 datasheet,說明 reset 後,i2c address 是 0x98。
但是 i2c address 是 7 個 bit + 1 個 bit R/W。
參考以前歐先生的 code,知道,在用 linux driver 控制時,要把這種標示的 i2c address shift 1 bit:
0x98 >> 1
就是 0x4c
用 i2cget commadn 讀一下 register 0xEA, 0xEB : Revision identification:
bash-3.2# i2cget -f -y 0 0x4c 0xea
0x20
bash-3.2# i2cget -f -y 0 0x4c 0xeb
0x51
所以是 0x2051. ADV7611 沒錯。
接著測試 write function。
ADV7611 有說,他的 address 是考 VS/FIELD/ALSB 決定的。
但是這是動態決定,所有 chip power on reset 後,address 都是 0x98。
之後 write 0x01 到 register 0x1B (SAMPLE_ALSB),之後, chip 就會依照 VS/FIELD/ALSB 的電壓決定 address:
- low : 0x98 (shift 後就是 0x4c)
- high: 0x9A (shift 後就是 0x4d)
bash-3.2# i2cget -f -y 0 0x4c 0x1b
0x00
然後寫入:
bash-3.2# i2cset 0 0x4c 0x1b 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will write to device file /dev/i2c-0, chip address 0x4c, data address
0x1b, data 0x01, mode byte.
Continue? [Y/n] Y
用新 address 0x4d 讀讀看:
bash-3.2# i2cget -f -y 0 0x4d 0x1b
0x01
好像成功了。
很可惜的,這個 tool 是基於 smbus,所以只有符合 smbus 規範的 i2c 裝置才能用。
TI 有一篇 pdf 說明 smbus, i2c 的差異: http://www.ti.com/lit/an/sloa132/sloa132.pdf
沒有留言:
張貼留言