我尝试使用i2ctools包中的i2cdetect实用程序检测i2c总线上的rtc设备。由于在扫描i2c总线时看不到任何内容,我使用示波器,在第9个SCL的上升沿(ACK位),我在SDA信号上得到半幅。
进一步详情:
您的测量电压通常是什么电压,以及在不寻常的情况下是什么电压?
正常电压:0V表示0逻辑,3.3V表示1逻辑电压。在不寻常的情况下,我测量1.4V(几乎是正常情况下1逻辑的半电压)
您是否应该按照自己的方式使用上拉电阻和开路集电极驱动器?
是的,SDA和SCL线用4k7电阻上拉,rtc器件配置为开漏(CMOS)。
主机和从机是否都以相同的电压工作?
是的,3.3V
@Martin Thompson:谢谢。那么,这是我的i2c总线的原理图(实际上,只连接了一个rtc设备)。
3.3V 3.3V 3.3V 3.3V
____ ____ ____ ____
| | | |
| +--+ +--+ |
| 4k7 | | 4k7 | | |
+-----------------+ | | | | +--------------+
| | +--+ +--+ | |
| FPGA Cyclone 4 | | | | Real time |
| (Altera) | | | | clock |
| GPIO | ---SDA----------------+-------------------|-------------| ST m41t83 |
| | | | |
| | ---SCL------------------------------------+-------------| |
| | | |
| | | |
+-----------------+ +--------------+
| |
| |
_____ ______
0V 0V
这是示波器的屏幕截图,它可以获取SDA和SCL信号:
SDA
________ ______________ _________________________________ __ ___________
| | | | | | | | |
| | | | | | | | |
| | | | | _____| | | |
| | | | | | | | |
|______| |_______| |________________________________| |_____| |_______________
SCL
____________ ___ ___ ___ ___ ___ ___ ___ ___ ___ _______________________________
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
|___| |___| |___| |___| |_______________________________| |___| |___| |___| |___| |___|
当我使用i2cdetect实用程序( i2cdetect 0 0x68 0x68 )从linux shell向地址0x68的rtc设备发送请求时,会获得这些信号。
顺便说一下,请原谅我糟糕的ascii设计,但由于我是论坛上的新手,我无法发布图片。希望这是可以理解的; - )
关于“屏幕截图”的澄清:SCL和SDA的幅度约为3.5V,而在不寻常的情况下(在第9个scl的上升沿)它是1.4V
答案 0 :(得分:0)
我遇到了同样的问题,它与主机上的SDA / SCL IO配置有关(应使用开漏,而不是推拉)。