- UID
- 1029342
- 性别
- 男
|
最近在学习嵌入式处理器的过程之中,发现嵌入式系统的学习方法不过是先从芯片本身入手,掌握它最基本的系统架构,了解它开发的一般特点、开发流程、调试方法和板级支持包等功能。然后就是对每一个模块的学习,特别是体系结构和编程模型。提醒大家一句,不要小视汇编语言的学习,特别是要理解每代芯片的底层架构,存储器的映射,中断机制,指令集系统等等。对于硬件学习来说,嵌入式系统的学习还有一大块内容就是对它外围器件和基本输入输出设备的学习,通俗点说,就是要了解它能干什么?怎么让它干的问题。
最近,为了准备导师规定做的一次学术报告,给其他同学们讲述ARM Cortex M3的一个基本硬件模块,做一下I2C总线知识的基本梳理,同时好好体会一下作为未来立志于从事IT工程师这种角色应当怎样去写技术笔记。
I2C总线是NXP公司推出的一种芯片间串行传输总线,能够传输的距离虽然不太远,只有7.6m,但对于芯片间传输,可靠性非常好,因此得到了很广泛的应用,而且结构简单,便于推广。它采用两线制,由串行时钟线SCL和串行数据线SDA构成,只需要两根线就能实现总线上各个期间的全双工同步数据传送,可以很方便的构成多级系统和外围器件扩展系统。
注意这么几点:
所有挂接在I2C总线上的器件和接口电路都应具有I2C总线接口,且所有的SDA/SCL同名端相连。总线上所有器件要依靠SDA发送的地址信号寻址,不需要片选线。
特点:组成系统结构简单,占用空间小,芯片管脚的数量少,无需片选信号,价格低。允许若干兼容器件共享总线,应用比较广泛。总线的长度可达7.6m,传送速度可达400kbps,标准速率为100kbps。支持多个组件。支持多主控器件(某时刻只能有一个主控器件)。I2C总线上所有设备的SDA, SCL引脚必须外接上拉电阻。
通信规则:
1、 数据有效性:
在SCL高电平期间,SDA线上的数据必须保持稳定。SDA上的电平高低表示需要传输的数据,数据线SDA仅可在时钟SCL为低时才能改变。
2、 起始格式:
起始信号用于开始I2C总线通信。其中,起始信号是在时钟线SCL为高电平期间,数据SDA上高电平向低电平变化的下降沿信号。起始信号出现以后,才可以进行后续的I2C总线寻址或数据传输等
这里,注意到:SDA产生高电平的时间要大于4.7us,而且SDA由高电平向低电平跳变后,持续时间要大于4us以上,然后SCL才被拉低为0。
3、 停止格式
终止信号用于终止I2C总线通信。其中,终止信号是在时钟线SCL为高电平期间,数据线SDA上低电平到高电平变化的上升沿信号。终止信号一出现,所有I2C总线操作都结束,并释放总线控制权。
和起始信号类似,终止信号也必须满足在SCL高电平期间,SDA产生一个持续时间大于4.7us的上升沿跳变,才能触发。
4、 应答信号
应答信号用于表明I2C总线数据传输的结束。 I2C总线数据传送时,一个字节数据传送完毕后都必须由主器件产生应答信号。主器件在第9个时钟位上释放数据总线SDA,使其处于高电平状态,此时从器件输出低电平拉低数据总线SDA为应答信号。应答信号的时序,如图所示。
5、 字节格式
SDA线上的每个字节必须为8位长,不限制每次传输的字节个数。且每个字节后面必须有一个应答位,当接收器不能接收另一个完整的字节时,可以保持时钟线SCL为低电平并强制发送器进入等待状态。当接收器释放时钟线SCL(即将SCL置为高电平),数据传输继续进行。
6、 带7位地址的数据格式(MSB)
从机地址必须在起始信号之后发送,MSB的格式为前7位为地址,最后一位为数据方向位R/S,R表示接收(receive=1),S表示发送(send=0)。首字节的R/S位如果为0,表示主机将向从机发送(写)信息,如果为1,则反之。
7、 总线仲裁
只有在总线空闲时,主机才可以启动传输过程。如果在起始条件最少保持时间内,两个或两个以上的主机都有可能产生起始条件。则当SCL为高电平时在SDA上发生仲裁。此时,发送SDA高电平的主机将要关闭其数据输入状态,将总线交给SDA正在发送低电平的主机 |
|