首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DM642的一点IIC接口总结

DM642的一点IIC接口总结

一,DM642的I2C接口及I2C协议简单介绍
     TMS320DM642片上带有一个I2C接口SDA(D3)和SCL(E4),DM642通过I2C接口与外部I2C外设通信,如I2C EEPROM、I2C视频解/编码器等。I2C通信的数据传输率一般包括100k和400k两种,支持多机通信,但同一时刻只允许存在一个主控设备,被控设备均使用唯一的地址标识符,I2C通信具有完备的通信协议,发送START起始位启动通信,获得总线控制权,发送STOP位结束通信,释放总线控制权。
     发送START位后再发送被控设备的地址,其中高7位为地址码,第0位为读/写控制标志RW,RW=0表示向被控设备写数据,RW=1表示从被控设备读数据。
     I2C协议的读写操作可以概括如下步骤:
     写操作:
     1.当主控设备检测到I2C总线处于空闲状态时,首先发送S位获得I2C总线控制权;
     2.发送寻址字节(7位地址位+1位读写控制位0);
     3.主控设备等待被控设备发送应答位(ACK);
     4.主控设备接收到ACK位后开始发送第1个数据字节;
     5.主控设备等待被控设备发送的应答位,如果应答位是ACK,则继续发送数据,如果应答位是NACK,停止发送数据;
     6.主控设备发送完全部数据后,发送一个STOP停止位,接收I2C通信释放总线控制权。
     读操作:
     1.主控设备检测到I2C总线空闲时,发送S起始位;
     2.发送地址字节(7位地址位+1位读写控制位1);
     3.被寻址的设备发送应答信号ACK;
     4.主控设备接收到ACK后释放数据总线,开始接收第1个数据字节;
     5.主控设备接收到数据后,发送ACK应答信号表示继续传送数据,发送NACK信号表示传送数据结束;
     6.主控设备接收完全部数据后,发送一个STOP停止位,接收I2C通信。
     二、分析视频解码芯片TVP5150A和视频编码芯片SAA7121H的设备地址
     1.TVP5150A的设备地址由I2CSEL引脚所接的上拉电阻或下拉电阻确定,I2CSEL引脚的状态与设备地址的映射关系如下:
     引脚状态                            写操作                                 读操作
        0                                       0xB8                                     0xB9
        1                                       0xBA                                     0xBB
     2.SAA7121H的设备地址由SA引脚确定,该引脚为低电平时,设备地址为0x88,该引脚为高电平时,设备地址为0x8C。
     由TVP5150A和SAA7121H设备地址可以知道,当I2CSEL或SA引脚电平确定时,设备的地址是唯一确定的!SAA7121H比较好理解唯一确定的含义,对于TVP5150A来说,若I2CSEL=1,则该设备地址可以理解为0x1011101(7位寻址模式),而写操作时最后加一位bit0=0即0x10111010=0xBA,读操作时bit0=1即0x10111011=0xBB,这就好理解为什么写操作和读操作时设备地址看起来不同了。同理,因为SAA7121H芯片,对于主机DM642来说,只有写操作,所以设备地址的最后一位bit0始终为0(8=1000和C=1100),这也是符合I2C写操作协议规定的。
     三、分析开发板对应例程代码中,表示I2C设备地址时右移一位的情况(如,addrI2C=0xBA>>1)之原因
     在阅读开发板例程代码时,之前一直有个疑问,为什么表示I2C设备地址时一定要右移一位?可以不右移这一位吗?
     查阅TMS320C6000 DSP Inter-Integrated Circuit(I2C)Module Reference Guide,8.9中有介绍I2C模式寄存器I2CMDR,第8字段扩展地址使能位,当XA=0时为7位寻址模式且地址由I2CSAR的低7位确定,当XA=1时为10位寻址模式这时地址由I2CSAR的低10位确定。默认情况下,XA=0,所以代码中addI2C=0xBA>>1右移一位是必须的,不然不能正常寻址从设备。
返回列表