|
最近做FPGA的I2C通信实验时,菜鸟无意中对I2C中的“握手”信号做出了以下不负责任的理解:
写操作时:器件地址后的“握手”,数据地址后的“握手”,写数据后的“握手”三个都必须让器件认为已“握手”,否则会停在这个时刻里,不会完成操作或被其他操作打断。
读操作时:器件地址(写)后的“握手”必须让器件认为已“握手”,否则会停在这个时刻里,不会被其他操作打断;
器件地址(读)后的“握手”得让器件认为已“握手”,否则虽可以完成整个操作,但读不到有效数据;
而数据地址后的“握手”无须让器件认为已“握手”,只要你确保地址是正确的,就能读到有效数据;
关于器件认为的“已“握手””:
写操作时:器件貌似是在ACK周期里SCL下降沿刚刚过后的某个周期检测SDA线上的电平,如果是“低”,就认为“已“握手””;
这样的话,我们是不是就可以人为创造一个伪“握手”信号,也就是在ACK周期里SCL下降沿以后人为拉高SDA(设置SDA为输出,拉高SDA),这样的话只要你确保
地址(三种地址)是正确的,就能正常写入数据。
读操作时:器件地址(写)后的“握手”,上同写操作;
器件地址(读)后的“握手”和 数据地址后的“握手”貌似不同上面,具体器件怎么个认为机制,我可不敢断想了,否则砖就拍的太厉害了...
仅是回故用笔记,个人看法,待高人明示。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|