⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c协议.txt

📁 基于I2C协议的读写程序,本人是用作IC卡读卡器用的
💻 TXT
字号:
再读I2C协议
    号称最简单串行通讯协议,只需要一根数据线一根时钟线就可以完成半双工通讯。
    在公司居然找不到一个完整可用的PPC系列I2C控制器的驱动程序。究其原因主要有:
    1.开发人员只看PPC UM或者器件的datasheet,不看I2C协议规范。而UM对I2C规范描述的过为简陋,因此混淆了I2C协议与I2C器件的应用协议。
    2.PPC的I2C控制器对I2C协议进行了封装,而封装后的寄存器功能又不能和I2C协议的时序要求完全相对应。被封装的I2C控制器不如直接用IO口模拟I2C时序那么直接。
   由于现在手头的一块板以后要使用I2C和另外一块板互联,N年前看过PPC UM关于I2C控制器的描述,现在都忘记了。因此今天又看了一遍I2C协议规范和850的UM,为防止以后再次忘记,特记录一下,以备日后查阅。
 
1.谁主动发起数据请求(读/写)谁就是主机。
2.主机提供时钟。问题:如果主从机都提供时钟后果将会怎样?
3.SCL为高电平时,SDA从高到低跳变表示起始条件,从低到高跳变表示结束条件。数据交易过程中SDA表示的数据的跳变只能发生在SCL为低电平的时候。
4.主机发送起始条件后,发送的第一个字节是从机地址(7bit)+读写指示(1bit),从机在SDA上产生1bit的ACK。
5.第一个字节的传输至此结束。以后的字节传输也是发送方发送一个8bit数据,接收方发一个1bit的ACK。至于是主机发送数据还是从机发送就看读写指示那个比特。
6.数据传输结束后主机发送停止条件。
7.主机发送停止条件之前,如果主机是接收方需要回应,则主机发NACK。为什么不是ACK,这个还需要再想想。
 
    关于重复起始条件:主机在一次数据传输过程中可以发送多个起始条件。
    一个重复起始条件的典型应用:
    AT2404的EEPROM的random read时序需要主机第一个字节发送从机器件地址+写命令,第二个字节主机发送需要读的EEPROM片内地址偏移,第三个字节主机再发送一个具有从机器件地址的读命令,以后从机就给出该片内偏移的数据内容。random read时序和page write时序很相似,page write需要主机第一个字节发送从机器件地址+写命令,第二个字节主机发送需要写的EEPROM片内地址偏移,以后就是主机发送的需要写的数据。random read 和page write的前两个字节的时序完全相同,AT2404把主机发送的第3个字节是理解为page write的第一个要写的数据还是randomread的读命令呢?关键就看主机发送的第三个字节是否具有起始条件。random read的第三个字节带有起始条件,page write的第三个字节木有起始条件。这就是重复起始条件的应用。换句话说主机发送的命令字节一定要带起始条件,在一次传输过程中主机可以发送多个命令。
 
    对于PPC850的I2C接口需要注意:
    1.如果某个发送BD status的S位被置位,则发送该buffer之前会发送起始条件。
    2.如果某个发送BD status的L位被置位,则该buffer的数据发送完后发送停止条件。
 
    PPC850系列CPU的I2C接口的几个疑问
   1.做为接收方,每接收一个字节后回ACK的动作是怎么完成的?
   猜测是I2C控制器接收完数据后自动完成的,不需要软件干预,但是如何判断是回ACK还是NACK呢?
   2.如果主机在发送停止条件前一直处于接收数据状态(回ACK),这个停止条件是如何完成的?
   根据850 I2C发送BD status的L位的描述,谁在发送数据谁决定发送停止条件,这个与规范描述的谁是主机税发送停止条件矛盾。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -