如果BK1080的I2C地址0x80与其它I2C设备地址有冲突, 请使用备用芯片地址:0x70.
用0x70的读写格式和用0x80不一样, 有点类似硬件I2C模式, 兼容硬件I2C, 但比硬件I2C更方便.
除了芯片地址和寄存器地址的写入格式有点不一样外, 写入和读出数据的方法都一样.
支持从任何一个寄存器开始写
支持一次性读写1~n多个寄存器.
1.写操作
写操作举例. 用I2C地址0x80写REG3为0xaa55.
S |
0x80 |
A |
0x06 |
A |
0xaa |
A |
0x55 |
A |
P |
首字节为I2C地址0x80,
接着是寄存器地址0x03左移一位,低位用读写位补充0表示写,所以是0x06,
后面是要写的值0xaa,0x55.
用I2C地址0x70写REG3为0xaa55
S |
0xe0 |
A |
0x03 |
A |
0xaa |
A |
0x55 |
A |
P |
首字节是0x70左移一位, 最低位用读写位补充, 0表示写, 得到数值0xe0.
接着是寄存器地址0x03.
后面是要写的值0xaa,0x55.
2.读操作
读操作举例. 用I2C地址0x80读REG3,读回来的值为0xaa55.
S |
0x80 |
A |
0x07 |
A |
0xaa |
A |
0x55 |
NA |
S |
首字节为I2C地址0x80,
接着是寄存器地址0x03左移一位,低位用读写位补充,1表示读,所以是0x07,
后面是要写的值0xaa,0x55.
用I2C地址0x70读REG3,读回来的值为0xaa55.
S |
0xe1 |
A |
0x00 |
A |
0x08 |
A |
0x10 |
A |
||
0x80 |
A |
0x02 |
A |
0x01 |
A |
0xaa |
A |
0x55 |
NA |
S |
首字节是0x70左移一位, 最低位用读写位补充, 1表示读, 得到数值0xe1.
默认从REG0开始读.
由于是从REG0开始读的,所以读出来的8个8bit最后两个8bit才是REG3的值.
此外还有一种方法,就是把要读的首地址写入REG126,这样读回来的值就以reg126的值为首地址:
步骤1:写REG126为0x0003
S |
0xe0 |
A |
0x7E |
A |
0x00 |
A |
0x03 |
A |
P |
步骤2:从REG3开始读(REG126在上一步已经被设为3了)
S |
0xe1 |
A |
0xaa |
A |
0x55 |
NA |
S |
3.屏蔽BK1080的0x80这个I2C地址
屏蔽0x80地址后,其它芯片的I2C的读写操作和BK1080之间就不会相互影响了,
方法:写REG125为0x01即可,
S |
0xe0 |
A |
0x7d |
A |
0x00 |
A |
0x01 |
A |
P |
|
4.更改0x70这个I2C地址
0x70这个I2C地址保存在REG127,是可以改的.
如果0x070与其它芯片I2C地址还有冲突,我们可以改掉这个地址,
在0x80这个地址还没屏蔽掉的情况下可如下操作:
S |
0x80 |
A |
0x7F |
0 |
A |
0x00 |
A |
0x60 |
A |
P |
改后备用i2c地址变成了0x60了.
相关博文:
http://forum.eet-cn.com/BLOG_ARTICLE_9891.HTM
45. BK1080,BK1086/88 I2C波形抓图
http://forum.eet-cn.com/BLOG_ARTICLE_9136.HTM
6.BK1080 I2C通信不上如何解决? BK1080读不到芯片ID怎么办? BK1080 I2C没反映怎么解决?
http://forum.eet-cn.com/BLOG_ARTICLE_9878.HTM
41. BK1080的I2C地址0x80与其它I2C设备地址冲突了怎么办? 如何屏蔽掉0x80这个I2C地址? 怎么修改I2C地址?
文章评论(0条评论)
登录后参与讨论