- 1
- 0
- 约2.75万字
- 约 150页
- 2024-06-02 发布于广西
- 举报
第一局部1
TVSystem电视系统框图MainChipTunerEEPROMFlashDDRAMIRKeyVGA,YPBPR,CVBS,HDMIAudioLineinPanelAMPI2c2
I2c总线只包括两条线,一条是时钟线(SCL),一条是数据线(SDA)。主机通过总线发送数据给被控器件,并通过总线从被控器件读取数据。数据为串行数据。3
I2c总线例如图4
I2c总线被控器件的地址包括器件地址(slaveaddress)和子地址(subaddress)。slaveaddress:是各种器件的唯一标识,例如EEPROM的slaveaddress为0xA0;TUNER的slaveaddress为0xC0。subaddress:是器件内部的地址,器件内部包含很多的存放器,不同的存放器分配不同的地址,通过subaddress访问器件存放器。当进行读操作时:发送slaveaddress|0x01当进行写操作时:发送slaveaddress~0x01例如:当读EEPROM时,发送0xA0;当写EERPOM时,发送0xA1。5
I2c总线工作过程:在I2C总线上挂了一个主机和假设干个被控器件。主机首先发送slaveaddress(其最低位说明了读写状态),所有的被控器件都会接收到这个slaveaddress,其中slaveaddress一致的被控器件将会开始响应。主机然后发送subaddress。如果是读数据的话,被控器件会将内部subaddress中的内容发送给主机;如果是写数据的话,主时机继续发送data给被控器件,被控器件会将data写入内部的subaddress中。每一类的被控器件的地址都是国际上分配好的,不会相互冲突。例如所有厂家生产的EEPROM的slaveaddress都是0xA0。6
I2c总线I2C读函数//Arguments:ucSlaveAdr-slaveaddress//ucSubAdr-subaddress//pBuf-pointerofbuffer//ucBufLen-lengthofbuffervoidi2cBurstReadBytes(BYTEucSlaveAdr,BYTEucSubAdr,BYTE*pBuf,BYTEucBufLen)example:i2cBurstReadBytes(0xA0,0x30,pBuf,1);7
I2c总线I2C写函数//Arguments:ucSlaveAdr-slaveaddress//ucSubAdr-subaddress//pBuf-pointerofbuffer//ucBufLen-lengthofbuffervoidi2cBurstWriteBytes(BYTEucSlaveAdr,BYTEucSubAdr,BYTE*pBuf,BYTEucBufLen)example:i2cBurstWriteBytes(0xA0,0x30,pBuf,1);8
I2c总线总线的控制权拉低总线取得总线的控制权,释放总线会使总线恢复高电平9
I2c总线数据的有效性SDA线上的数据必须在时钟的高电平周期保持稳定.数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变.唯一例外的起始条件和终止条件.10
I2c总线起始条件:在SCL线是高电平时.SDA线从高电平向低电平切换.这个情况表示起始条件.终止条件:当SCL是高电平时.SDA线由低电平向高电平切换表示停止条件.11
I2c总线响应数据传输必须带响应.相关的响应时钟脉冲由主机产生.在响应的时钟脉冲期间,发送器释放SDA线;在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平.12
I2c总线BOOLi2c_Start(void)voidi2c_Stop(void)BYTEi2c_ReceiveByte(BOOLbAck)biti2c_SendByte(BYTEucVal)BOOLi2c_AccessStart(BYTEucSlaveAdr,I2cIoTransTypetrans_t)voidi2cBurstReadBytes(BYTEucSlaveAdr,BYTEucSubAdr,BYTE
原创力文档

文档评论(0)