手册的说明部分:
I2C 总线模式
I2C总线模式只使用了SCLK和SDIO两个管脚。数据传输开始于Start条件,即SCLK为高电平时,SDIO产生下降沿。然后主机需要向SDIO输出一个8
位的Device ID。DeviceID是0x80。输出Device ID 之后, MCU 继续向SDIO上输出一个8位的控制字,控制字由7位的起始寄存器地址和一个读写
位组成(读操作为1,写操作为0)。在I 2 C 读数据时, 主机必须在BK1086/88E送出每个字节数据后给出一个ACK信号,并且在读出最后一个
字节后给出N A C K 信号。为了使通信更加稳定,SCLK信号的上升时间必须小于200ns。
经过尝试,用标准I2C驱动失败了。。。
找到了另外一个大神的说明,目前只有IO模拟的时序是成功的。
大神的尝试说明如下:
I2C接口
该设备的数据表指出 I2C 总线地址为 0x80。但是,Wire(I2C) Arduino 库在 0x80 上找不到该器件。实际上,Arduino在0x40上找到了该设备。这一定是由于地址从 8 位到 7 位的内部转换。(0x80 = 0b10000000;0x40 = 0b01000000)在尝试使用 Arduino I2C 库几次失败后,我决定编写必要的 I2C 例程来处理该设备。
然后就是纯IO模拟的时序成功的读写了该设备。。。
那么遇到这个情况如何用硬件的解决呢,有没要大佬看看。
|