当前位置: 技术问答>linux和unix
i2c通信问题
来源: 互联网 发布时间:2016-10-18
本文导语: 三星的平台,用I2c bus挂载slave device, 现在在内核probe的时候,初始化硬件不能收到slave device 的ack应答,就是说母线发送一个七位的slave device地址,加上一位的rw位标志,理论上说slave device在检测到和自己的地址匹...
三星的平台,用I2c bus挂载slave device, 现在在内核probe的时候,初始化硬件不能收到slave device 的ack应答,就是说母线发送一个七位的slave device地址,加上一位的rw位标志,理论上说slave device在检测到和自己的地址匹配时会发出ack的,但是现在收不到哦,用示波器根本看不到start condition,怀疑是硬件问题,但是硬件改了很多次,问题照旧,希望有碰到类似问题的高手指点一下
|
i2c芯片的地址通常都是硬件拉的,看一下地址拉的是否正确?
|
"理论上说slave device在检测到和自己的地址匹配时会发出ack的"
你怎么知道是匹配的?
I2C总线驱动做好后,还要实现设备驱动,你的 设备驱动实现了吗?不实现怎么发ACK
你怎么知道是匹配的?
I2C总线驱动做好后,还要实现设备驱动,你的 设备驱动实现了吗?不实现怎么发ACK
|
试试读出device ID,用i2c_master_send(), i2c_master_recv()内核函数。
|
量一下硬件的信号 ,确认硬件是否收到 了ACK,并且是否作出回应了,应该是硬件的问题,I2C总线应该不会错,再看硬件是否提供了相关的寄存器,可以通过操作寄存器的方式来访问硬件设备 ,而不用自己去实现I2C协议