我尝试使用 i2ctools 包中的 i2cdetect 实用程序检测 i2c 总线上的 rtc 设备。由于在扫描 i2c 总线时看不到任何东西,所以我使用示波器,在第 9 个 SCL 的上升沿(ACK 位)上,我在 SDA 信号上得到半幅值。
更多详细信息:
你正常测量的电压是多少,在不寻常的情况下是什么?
正常电压:0V 为 0 逻辑,3.3V 为 1 逻辑。在不寻常的情况下,我测量 1.4V(在正常情况下几乎是 1 逻辑的一半电压)
你有一个上拉电阻和集电极开路驱动器吗?
是的,SDA 和 SCL 线使用 4k7 电阻上拉,并且 rtc 设备配置为开漏 (CMOS)。
主机和从机是否在相同的电压下工作?
是的,在 3.3V
@马丁汤普森:谢谢。所以,这是我的 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
____________ ___ ___ ___ ___ ___ ___ ___ ___ ___ _______________________________
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | |
|___| |___| |___| |___| |_______________________________| |___| |___| |___| |___| |___|
当我从 linux shell使用 i2cdetect 实用程序 ( i2cdetect 0 0x68 0x68 )向地址为 0x68 的 rtc 设备发送请求时,会获得这些信号。
顺便说一句,请原谅我糟糕的 ascii 设计,但由于我是论坛的新手,我无法发布图片。希望它是可以理解的;-)
关于“屏幕截图”的澄清:SCL 和 SDA 的幅度约为 3.5V,在不寻常的情况下(第 9 个 scl 的上升沿)为 1.4V