This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM6467 I2C的问题

你好,我提过关于I2C的问题,但是您的回答和没回答一样,没什么实质性的意义。我就是想知道DM6467做I2C的从机,ARM端的LINUX下如何实现这样的方式。因为LINUX下的 DRIVER目录下I2C -CORE 和 davinci-i2c的文件中,是主机模式。做从机的话 如何实现,I2C的用户指南只说明了硬件寄存器的设置,并没有说LINUX下如何实现

  • 您需要自己写一个I2C的设备驱动,可以在i2c-davinci.c的基础上进行修改:

    1. 设置寄存器位ICMDR.MST=0,使6467的I2C工作在从模式下。

    2. 注册一个中断服务程序。当ICSTR.RSFULL=1时,表示该设备已接收到数据,你可以和主设备进行数据交换了。

    3. 您也可以注册一个字符设备,并实现poll,read,write等函数,这样可以在用户态下轮询I2C的状态,以及收发数据。

    具体的实现方法很多样,但需要您对Linux的驱动程序有一定的了解。关于6467 I2C的寄存器使用,可以参考文档SPRUER0B。

  • 1. 如果您真的觉得说了跟没说一样,您可以先找一下Linux驱动开发指南学习一下

    2. 没人会告诉你所谓的详细的实现机制,这是你应该搞定的

    3. 就好比TAO哥的帖子,你要真懂Linux驱动开发流程,他这个帖子说了也跟没说一样,你要是不懂,他这个帖子还是说了跟没说一样

  • 恩恩,好的,我对驱动还算了解,主要是问题出在 I2CBUS的框架是基于主模式的。有没有类似的例子

  • 我没别的意思,不是说和没说一样的意思。现在我是用户,如果我没看懂那个I2C的手册的话,我也不会来问,因为LINUX下I2CBUS作为从机驱动的话,确实很难做。。。。不知道您是否看过I2C-CORE.C 和 适配器驱动文件

  • For linux i2c arch you can use i2c_transfer, but you need implement interrupt upper layer for slave function. So it is not bus driver, it is device driver. My suggestion is you setup one layer for interrupt notify and you need implement i2c user mode driver. Do not use i2c bus driver.