一、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右移一位是必须的,不然不能正常寻址从设备。