打印
[技术问答]

以下I2C时序如何用标准的I2C外设驱动

[复制链接]
487|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
手册的说明部分:
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模拟的时序成功的读写了该设备。。。
那么遇到这个情况如何用硬件的解决呢,有没要大佬看看。

使用特权

评论回复
沙发
小明的同学|  楼主 | 2023-11-5 16:27 | 只看该作者
貌似只能这样了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

1392

帖子

2

粉丝