首页 > 代码库 > 对外设进行读写操作的过程

对外设进行读写操作的过程

     本文以TP芯片GT910为例,下面的内容均抄自该芯片SPEC。
(a)数据传输        
      通讯总是由主CPU 发起,有效的起始信号为:在SCL 保持为“1”时,SDA 上发生由“1”“0”的跳变。地址信息或数据流均在起始信号之后传输。所有连接在I2C 总线上的从设备,都要检测总线上起始信号之后所发送的8 位地址信息,并做出正确反应。在收到与自己相匹配的地址信息时,GT910 在第9 个时钟周期,将SDA 为输出口,并置“0”,作为应答信号。若收到不与自己匹配的地址信息,非0XBA 0XBBGT910 将保持闲置状态。SDA 口上的数据按9 个时钟周期串行发送9 位数据:8 位有效数据加1 位接收方发送的应答
信号ACK 或非应答信号NACK。数据传输在SCL “1”时有效。当通讯完成时,由主CPU 发送停止信号。停止信号是当SCL “1”时,SDA 状态由“0”“1”的跳变。
           b) GT910 写操作
(以设备地址为0xBA/0xBB 为例)
技术分享

 

技术分享
   
    上图为主CPU GT910 进行的写操作流程图。首先主CPU 产生一个起始信号,然后发送地址信息及读写位信息“0”表示写操作:0xBA在收到应答后,主CPU 发送寄存器的16 位地址,随后是8 位要写入到寄存器的数据内容。GT910 寄存器的地址指针会在写操作后自动加1,所以当主CPU 需要对连续地址的寄存器进行写操作时,可以在一次写操作中连续写入。写操作完成,主CPU 发送停止信号结束当前写操作。
   
        c) GT910 读操作
(以设备地址为0xBA/0xBB 为例)
技术分享

 

技术分享
    上图为主CPU GT910 进行的读操作流程图。首先主CPU 产生一个起始信号,然后发送设备地址信息及读写位信息“0”表示写操作:0xBA在收到应答后,主CPU 发送首寄存器的16 位地址信息,设置要读取的寄存器地址。在收到应答后,主CPU 重新发送一次起始信号,发送读操作:0xBB。收到应答后,主CPU 开始读取数据。GT910 同样支持连续的读操作,默认为连续读取数据。主CPU 在每收到一个Byte 数据后需发送一个应答信号表示成功接收。在接收到所需的最后一个Byte 数据后,CPU 发送非应答信号NACK”,然后再发送停止信号结束通讯。

对外设进行读写操作的过程