SMBUS 配置图:
SMBUS 不需要指定某个设备为主设备,哪个设备先发送起始信号,那么它将成为主
设备。
一次典型的SMBus 数据传输包括一个起始条件(START)、一个地址字节(位7-1:7
位从地址;位0:R/W 方向位)、一个或多个字节的数据和一个停止条件(STOP)。每个
接收的字节(由一个主器件或从器件)都必须用SCL 高电平期间的SDA 低电平(见图
19.3)来确认(ACK)。如果接收器件不确认,则发送器件将读到一个“非确认”
(NACK),这用SCL 高电平期间的SDA 高电平表示。
方向位占据地址字节的最低位。方向位被设置为逻辑1 表示这是一个“读”(READ)操
作,方向位为逻辑0 表示这是一个“写”(WRITE)操作
所有的数据传输都由主器件启动,可以寻址一个或多个目标从器件。主器件产生一个
起始条件,然后发送地址和方向位。如果本次数据传输是一个从主器件到从器件的写操作,
则主器件每发送一个数据字节后等待来自从器件的确认。如果是一个读操作,则由从器件
发送数据并等待主器件的确认。在数据传输结束时,主器件产生一个停止条件,结束数据
传输并释放总线。
总体流程:
1. 主设备发送起始信号
2. 这设备发送 从设备地址+W
3. 等待从设备发送ACK
4. 向从设备发送所有数据
5. 数据发送完毕后 改变设备状态成为 主设备接收状态 即先发送START 然后发送从
设备地址+R
6. 接收从设备发送过来的状态码
7. 返回NACK给从设备
驱动函数设计:
1 启动函数设计
SMB0CN = 0x44; //ENSMB=1 AA=1 使能I2C端口及应答位
//AA=1 设备刚启动时 它自动工作在从设备接收方式 当收到
的地址与本设备地址相符时,它将发送AA这位给主设备,表
示
应答,若AA=0则会将该设备移除I2C总线通信系统
SMB0ADR = DeviceAddress; //设置设备地址
SMB0CR = -25; //配置I2C设备速度到达400k bits
评论0