对外设进行读写操作的过程
2016-12-20 23:24
204 查看
本文以TP芯片GT910为例,下面的内容均抄自该芯片SPEC。
(a)数据传输
通讯总是由主CPU 发起,有效的起始信号为:在SCL 保持为“1”时,SDA 上发生由“1”到“0”的跳变。地址信息或数据流均在起始信号之后传输。所有连接在I2C 总线上的从设备,都要检测总线上起始信号之后所发送的8 位地址信息,并做出正确反应。在收到与自己相匹配的地址信息时,GT910 在第9 个时钟周期,将SDA 改为输出口,并置“0”,作为应答信号。若收到不与自己匹配的地址信息,非0XBA 或0XBB,GT910 将保持闲置状态。SDA 口上的数据按9 个时钟周期串行发送9 位数据:8 位有效数据加1 位接收方发送的应答
信号ACK 或非应答信号NACK。数据传输在SCL 为“1”时有效。当通讯完成时,由主CPU 发送停止信号。停止信号是当SCL 为“1”时,SDA 状态由“0”到“1”的跳变。
[align=left] b) 对GT910 写操作[/align]
(以设备地址为0xBA/0xBB 为例)
上图为主CPU 对GT910 进行的写操作流程图。首先主CPU 产生一个起始信号,然后发送地址信息及读写位信息“0”表示写操作:0xBA。在收到应答后,主CPU 发送寄存器的16 位地址,随后是8 位要写入到寄存器的数据内容。GT910 寄存器的地址指针会在写操作后自动加1,所以当主CPU 需要对连续地址的寄存器进行写操作时,可以在一次写操作中连续写入。写操作完成,主CPU 发送停止信号结束当前写操作。
[align=left] c) 对GT910 读操作[/align]
(以设备地址为0xBA/0xBB 为例)
上图为主CPU 对GT910 进行的读操作流程图。首先主CPU 产生一个起始信号,然后发送设备地址信息及读写位信息“0”表示写操作:0xBA。在收到应答后,主CPU 发送首寄存器的16 位地址信息,设置要读取的寄存器地址。在收到应答后,主CPU 重新发送一次起始信号,发送读操作:0xBB。收到应答后,主CPU 开始读取数据。GT910 同样支持连续的读操作,默认为连续读取数据。主CPU 在每收到一个Byte 数据后需发送一个应答信号表示成功接收。在接收到所需的最后一个Byte 数据后,主CPU 发送“非应答信号NACK”,然后再发送停止信号结束通讯。
(a)数据传输
通讯总是由主CPU 发起,有效的起始信号为:在SCL 保持为“1”时,SDA 上发生由“1”到“0”的跳变。地址信息或数据流均在起始信号之后传输。所有连接在I2C 总线上的从设备,都要检测总线上起始信号之后所发送的8 位地址信息,并做出正确反应。在收到与自己相匹配的地址信息时,GT910 在第9 个时钟周期,将SDA 改为输出口,并置“0”,作为应答信号。若收到不与自己匹配的地址信息,非0XBA 或0XBB,GT910 将保持闲置状态。SDA 口上的数据按9 个时钟周期串行发送9 位数据:8 位有效数据加1 位接收方发送的应答
信号ACK 或非应答信号NACK。数据传输在SCL 为“1”时有效。当通讯完成时,由主CPU 发送停止信号。停止信号是当SCL 为“1”时,SDA 状态由“0”到“1”的跳变。
[align=left] b) 对GT910 写操作[/align]
(以设备地址为0xBA/0xBB 为例)
上图为主CPU 对GT910 进行的写操作流程图。首先主CPU 产生一个起始信号,然后发送地址信息及读写位信息“0”表示写操作:0xBA。在收到应答后,主CPU 发送寄存器的16 位地址,随后是8 位要写入到寄存器的数据内容。GT910 寄存器的地址指针会在写操作后自动加1,所以当主CPU 需要对连续地址的寄存器进行写操作时,可以在一次写操作中连续写入。写操作完成,主CPU 发送停止信号结束当前写操作。
[align=left] c) 对GT910 读操作[/align]
(以设备地址为0xBA/0xBB 为例)
上图为主CPU 对GT910 进行的读操作流程图。首先主CPU 产生一个起始信号,然后发送设备地址信息及读写位信息“0”表示写操作:0xBA。在收到应答后,主CPU 发送首寄存器的16 位地址信息,设置要读取的寄存器地址。在收到应答后,主CPU 重新发送一次起始信号,发送读操作:0xBB。收到应答后,主CPU 开始读取数据。GT910 同样支持连续的读操作,默认为连续读取数据。主CPU 在每收到一个Byte 数据后需发送一个应答信号表示成功接收。在接收到所需的最后一个Byte 数据后,主CPU 发送“非应答信号NACK”,然后再发送停止信号结束通讯。
相关文章推荐
- linux 内核驱动加载过程中 向文件系统中的文件进行读写操作
- C++中对文件进行读写操作
- C#对Excel报表进行操作(读写和基本操作)
- C++中对文件进行读写操作
- 在javascript中进行cookie的读写操作
- 在javascript中进行cookie的读写操作
- 对项目配置文件app.comfig进行读写操作
- C#中对INI文件进行读写操作
- 利用Oracle目录对文件进行读写操作
- C++中对文件进行读写操作
- 转载:SQL through PowerShell 使用Powershell访问SQL并对数据进行读写增加删除操作
- 低格过程到底对硬盘进行了什么操作?
- C++中对文件进行读写操作
- SQL Server安装过程中出现“以前进行的程序创建了挂起的文件操作
- C++中对文件进行读写操作
- 对WEB.Config文件进行(读写操作)
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- 让CentOS(RedHat)Linux支持NTFS读写操作-安装全过程
- SQL2000安装过程中出现“以前进行的程序创建了挂起的文件操作,运行安装程序前,必须重新启动”的解决办法