一、总线- -信息传送的公共通路
1、知识
1)单工:指数据传输只支持数据向一个方向传输,即从A到AB不能从B到BA 全双工(full-duplex)该系统允许两个设备之间同时传输双向数据。一般的电话和手机都是双工系统,因为你也可以在说话时听到对方的声音。
2)半双工(half-duplex)该系统允许两个设备之间的双向数据传输,但不能同时进行。因此,只允许一个设备同时传输数据。如果另一个设备想要传输数据,则需要等待原始传输数据的设备完成。 3)波特率表示每秒传输一次数字。在数字通信中,通常使用时间间隔相同的符号来表示二进制数字。这个时间间隔内的信号称为(二进制)码元 4)多主配置方法是指多个master机,单个slave模式需要竞争和优先级 5)同步异步 , 例如,一家餐厅有五位客人,同步意味着,第一次点菜,点鱼,好吧, 厨师去抓鱼杀鱼。半个小时后,他把鱼给了第一一个客人,开始下一个客人。他一个接一个地来,按顺序 相同, 异步,异步意味着第一个客人,点什么,点鱼,给它一个品牌,让他等待,下一个客人然后点菜,然后让厨师做,哪道菜先好, 同步的优点是:同步是按顺序一个一个来的,不会乱掉,更不用说上面的代码没有执行完就执行下面的代码了。 缺点:分析速度不如异步快; 异步的优点是:异步是接受任务,直接到后台,在接下来的任务中,一直都是这样,谁先读完,谁先执行, 缺点:没有顺序 ,谁先读,谁先执行? ,上面的代码还没出来就出来了,会报错;
2、总线(Bus)
分散连接:各部件之间使用单独的连接 bus:公共汽车 远距离传输使用串行比并行更容易出错 总线主设备:控制总线 总线从设备:响应主设备发出的总线命令
总线(Bus)它是计算机各功能部件之间传输信息的公共通信干线。它是由导线、外部总线(系统总线)组成的传输线束 按计算机所,传输数据、数据地址和控制信号可分为数据总线、地址总线和控制总线。
总线是一种,它是cpu、内存、输入、输出设备传输信息的公共通道, 主机的各个部件通过总线相连接,外部设备通过相应的与总线连接,形成计算机硬件系统。 在计算机系统中,各部件之间公共通道称为总线,微型计算机以总线结构连接各功能部件。
3、内部总线- - -cpu中的主干道
内部总线是一种,是cpu、内存、输入、输出设备传递信息的公用通道。 内部总线,。其宽度可为8、16、32、64或128位。 如在CPU寄存器与算术逻辑部件之间的内部ALU与控制部件传输数据的总线称为(即芯片内部的总线)
1)并发
CAMAC,用于仪表检测系统 工业标准架构总线(ISA) 扩展ISA(EISA) Low Pin Count(LPC) 微通道(MCA) MBus 多总线(Multibus),用于工业生产系统 NuBus,或称IEEE 1196 OPTi早期使用本地总线Intel 80486主板 外围部件互联总线(PCI) S-100总线(S-100 bus),或称IEEE 696,用于Altair或类似微处理器 SBus或称IEEE 1496 VESA本地总线(VLB,VL-bus) VERSAmodule Eurocard bus(VME总线) STD总线(STD bus),用于八位或十六位微处理器系统 Unibus Q-Bus PC/104 PC/104 Plus PC/104 Express PCI-104 PCIe-104
2)串行
1-Wire HyperTransport I2C 串行PCI(PCIe) 串行外围接口总线(SPI总线) 火线i.Link(IEEE 1394)
3、外部总线- - -计算机系统中的主干道
用于传输外部总线的电缆和连接器系统I/O路径技术指定的数据和控制信号还包括总线终结电阻或电路,用于减弱电缆上的信号反射干扰。 ExternalBus(外部总线) ,也就是通常所说的总线(Bus)- - -片外总线,是的,又称系统总线.
1)并发
ATA:磁盘/磁带周围附件总线,又称 PATA、IDE、EIDE、ATAPI 等等。 (the original ATA is parallel, but see also the recentserial ATA) HIPPI(HIgh Performance Parallel Interface):高速平行接口。 IEEE-488:也称 GPIB(General-Purpose Instrumentation Bus)或 HPIB(Hewlett-Packard Instrumentation Bus)。 PC card:著名的前身PCMCIA,常用于笔记本电脑等便携式设备,但自引入以来USB嵌入式网络后,总线将慢慢停止使用。 SCSI(Small Computer System Interface):磁盘/磁带周围附件总线的小计算机系统接口。
2)串行
USB Universal Serial Bus, 大量外部设备均采用此总线 Serial Attached SCSIand otherserial SCSIbuses Serial ATA Controller Area Network(“CAN总线”) EIA-485 FireWire Thunderbolt
二、对特定总线的详细描述
1、CAN总线协议- - -串行- - -外部总线- - -计算机系统中的主干道
1)CAN总线特性
a) CAN 的全称为 Controller Area Network,即控制局域网,简称控制局域网 CAN。 CAN 德国是最早的 BOSCH(博世)已经开发出国际标准(ISO 11898)是目前应用最广泛的现场总线之一。 BOSCH 主要是汽车电子,所以 CAN 一开始主要是为电子汽车准备的,事实也是如此。 CAN 该协议已成为汽车网络的标准协议。当然了, CAN 不仅用于汽车电子,经过几十年的发展, CAN 该协议的高性能和高可靠性得到了业界的认可。目前,除汽车电子外,它还广泛应用于工业自动化、医疗、工业和船舶。以汽车电子为例,汽车上有空调、车门、发动机、大量传感器等。 CAN总线连在一起形成网络, 网络 (由节点和连接组成的图)。结构如图 66.1.1.1 所示: 图 66.1.1.1 各单位通过 CAN 总线连接在一起,每个单元都是独立的 CAN 节点。同一个 CAN 网络中所有单元的通信速度必须一致,不同网络之间的通信速度可以不同。比如图66.1.1.1 中 125Kbps(千比特每秒) 的 CAN 网络下所有节点的速度都是 125Kbps 是的,整个网络由一个网关连接到其他网络。 CAN 主要有几个特点: ①、多主控制 在总线空闲时,所有单元都可以发送消息(多主控制),当两个以上单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。 ID 不是发送的目的地址,而是访问总线的优先级。当两个以上单位同时开始发送消息时,每个消息 ID 逐一仲裁比较每个位置。仲裁获胜(被判定为优先级最高)的单位可以继续发送信息,仲裁失败的单位可以立即停止发送并接收。 ②、系统的柔软性,即没有地址,只有优先级 连接到总线的单元没有类似于地址的信息。因此,在总线上增加单元时,不需要更改连接到总线上其他单元的软硬件和应用层。 ③、通信速度快,距离长 最高 1Mbps(距离小于 40M),最远可达 10KM(速率低于 5Kbps)。 ④、错误检测、错误通知和错误恢复功能 所有单位都可以检测错误(错误检测功能),检测错误的单位将立即通知所有其他单位(错误通知功能)。一旦发送消息的单位检测到错误,当前的发送将被迫结束。强制发送的单位将重复此消息,直到成功发送(错误恢复功能)。 ⑤、故障封闭功能 CAN 可以判断错误的类型是总线上的临时数据错误(如外部噪声等)还是连续数据错误(如单元内部故障、驱动器故障、断线等)。因此,当总线上的连续数据错误发生时,导致故障的单元可以从总线上隔离出来。 ⑥、连接节点多 CAN 总线是可以同时连接多个单元的总线。理论上,可连接单元的总数没有限制。但实际上,可连接单元的数量受到总线上时间延迟和电气负载的限制。降低通信速度可连接的单元数增加;提高通信速度,则可连接的单元数减少。
b) CAN 电气属性 CAN 总线使用两根线来连接各个单元: CAN_H 和 CAN_L, CAN 控制器通过判断这两根线上的电位差来得到总线电平, CAN 总线电平分为显性电平和隐性电平两种。显性电平表示逻辑“0”,此时 CAN_H 电平比 CAN_L 高,分别为 3.5V 和 1.5V,电位差为 2V。隐形电平表示逻辑“1”,此时 CAN_H 和 CAN_L 电压都为 2.5V 左右,电位差为 0V。 CAN 总线就通过显性和隐形电平的变化来将具体的数据发送出去,如图 66.1.2.1 所示: CAN 总线上没有节点传输数据的时候一直处于隐性状态,也就是说总线空闲状态的时候一直处于隐性。 CAN 网络中的所有单元都通过 CAN_H 和 CAN_L 这两根线连接在一起, 如图66.1.2.2 所示: 途中所有的 CAN 节点单元都采用 CAN_H 和 CAN_L 这两根线连接在一起, CAN_H 接CAN_H、 CAN_L 接 CAN_L, CAN 总线两端要各接一个 120Ω的端接电阻,用于匹配总线阻抗,吸收信号反射及回拨,提高数据通信的抗干扰能力以及可靠性。CAN 总线传输速度可达 1Mbps/S,最新的 CAN-FD 最高速度可达 5Mbps/S,甚至更高,CAN-FD 不在本章讨论范围,感兴趣的可以自行查阅相关资料。 CAN 传输速度和总线距离有关,总线距离越短,传输速度越快。
2)CAN总线协议
通过 CAN 总线传输数据是需要按照一定协议进行的, CAN 协议提供了 5 种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有 11 位标识符(ID),扩展格式有 29 个标识符(ID)。 这 5 中帧的用途见表66.1.3.1: a)数据帧 数据帧由 7 段组成: ①、帧起始,表示数据帧开始的段。 ②、仲裁段,表示该帧优先级的段。 ③、控制段,表示数据的字节数及保留位的段。 ④、数据段,数据的内容,一帧可发送 0~8 个字节的数据。 ⑤、 CRC 段,检查帧的传输错误的段。 ⑥、 ACK 段,表示确认正常接收的段。 ⑦、帧结束,表示数据帧结束的段。 数据帧结构如图 66.1.3.1 所示: 图 66.1.3.1 给出了数据帧标准格式和扩展格式两种帧结构,图中 D 表示显性电平 0、 R 表示隐性电平 1, D/R 表示显性或隐性,也就是 0 或 1,我们来简单分析一下数据帧的这 7 个段。 ①、帧起始 帧起始很简单,标准格式和扩展格式都是由一个位的显性电平 0 来表示帧起始。 ②、仲裁段 仲裁段表示帧优先级,仲裁段结构如图 66.1.3.2 所示: 标准格式和扩展格式的仲裁段不同,从图 66.1.3.2 可以看出,标准格式的 ID 为 11 位,发送顺序是从 ID10 到 ID0,最高 7 位 ID10~ID4 不能全为隐性(1),也就是禁止 0X1111111XXXXX这样的 ID。扩展格式的 ID 为 29 位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0,基本ID 与标准格式一样,禁止最高 7 位都为隐性。 ③、 控制段 控制段由 6 个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同,如图 66.1.3.3 所示: 图 66.1.3.3 中 r1 和 r0 为保留位,保留位必须以显性电平发送。 DLC 为数据长度,高位在前, DLC 段有效值范围为 0~8。 ④、数据段 数据段也就是帧的有效数据,标准格式和扩展格式相同,可以包含 0~8 个字节的数据,从最高位(MSB)开始发送,结构如图 66.1.3.4 所示: 注意,图 66.1.3.4 中数据段的 0~64 为 bit,对应到字节就是 0~8 字节。 ⑤、 CRC 段 CRC 段保存 CRC 校准值,用于检查帧传输错误,标准格式和扩展格式相同, CRC 段结构如图 66.1.3.5 所示: 从图 66.1.3.5 可以看出, CRC 段由 15 位的 CRC 值与 1 位的 CRC 界定符组成。 CRC 值的计算范围包括:帧起始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用计算得到的 CRC 值与此 CRC 段进行比较,如果不一致的话就会报错。 ⑥、 ACK 段 ACK 段用来确认接收是否正常,标准格式和扩展格式相同, ACK 段结构如图 66.1.3.6 所示: 从图 66.1.3.7 可以看出, ACK 段由 ACK 槽(ACK Slot)和 ACK 界定符两部分组成。 发送单元的 ACK,发送 2 个隐性位,而接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。发送 ACK 的是所有接收单元中接收到正常消息的单元, 所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息,这些接收单元既不处于总线关闭态也不处于休眠态的所有接收单元中。 ⑦、帧结束 最后就是帧结束段,标准格式和扩展格式相同,帧结束段结构如图 66.1.3.7 所示: 从图 66.1.3.7 可以看出,帧结束段很简单,由 7 位隐性位构成。
b)遥控帧 接收单元向发送单元请求数据的时候就用遥控帧,遥控帧由 6 个段组成: ①、帧起始,表示数据帧开始的段。 ②、仲裁段,表示该帧优先级的段。 ③、控制段,表示数据的字节数及保留位的段。 ④、 CRC 段,检查帧的传输错误的段。 ⑤、 ACK 段,表示确认正常接收的段。 ⑥、帧结束,表示数据帧结束的段。 遥控帧结构如图 66.1.3.8 所示: 从图 66.1.3.8 可以看出,遥控帧结构基本和数据帧一样,最主要的区别就是遥控帧没有数据段。遥控帧的 RTR 位为隐性的,数据帧的 RTR 位为显性,因此可以通过 RTR 位来区分遥控帧和没有数据的数据帧。遥控帧没有数据,因此 DLC 表示的是所请求的数据帧数据长度,遥控帧的其他段参考数据帧的描述即可。
c) 错误帧 当接收或发送消息出错的时候使用错误帧来通知,错误帧由错误标志和错误界定符两部分 组成,错误帧结构如图 66.1.3.9 所示 错误标志有主动错误标志和被动错误标志两种,主动错误标志是 6 个显性位,被动错误标志是 6 个隐性位,错误界定符由 8 个隐性位组成。
d)过载帧 接收单元尚未完成接收准备的话就会发送过载帧,过载帧由过载标志和过载界定符构成,过载帧结构如图 66.1.3.10 所示: 过载标志由 6 个显性位组成,与主动错误标志相同,过载界定符由 8 个隐性位组成,与错误帧中的错误界定符构成相同。
e) 帧间隔 帧间隔用于分隔数据帧和遥控帧,数据帧和遥控帧可以通过插入帧间隔来将本帧与前面的任何帧隔开,过载帧和错误帧前不能插入帧间隔,帧间隔结构如图 66.1.3.11 所示: 图 66.1.3.11 中间隔由 3 个隐性位构成,总线空闲为隐性电平,长度没有限制,本状态下表示总线空闲,发送单元可以访问总线。延迟发送由 8 个隐性位构成,处于被动错误状态的单元发送一个消息后的帧间隔中才会有延迟发送。
f)CAN 速率 CAN 总线以帧的形式发送数据,但是最终到总线上的就是“0”和“1”这样的二进制数据,这里就涉及到了通信速率,也就是每秒钟发送多少位数据,前面说了 CAN2.0 最高速度为1Mbps/S。对于 CAN 总线,一个位分为 4 段: ①、同步段(SS) ②、传播时间段(PTS) ③、相位缓冲段 1(PBS1) ④、相位缓冲段 2(PBS2) 这些段由 Tq(Time Quantum)组成, Tq 是 CAN 总线的最小时间单位。帧由位构成,一个位由 4 个段构成,每个段又由若干个 Tq 组成,这个就是位时序。 1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。 各段的作用和 Tq 数如图 66.1.4.1 所示: 1 个位的构成如图 66.1.4.2 所示: 图 66.1.4.2 中的采样点是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1结束处。根据这个位时序,我们就可以计算 CAN 通信的波特率了。具体计算方法,我们等下再介绍,前面提到的 CAN 协议具有仲裁功能,下面我们来看看是如何实现的。 在总线空闲态,最先开始发送消息的单元获得发送权。当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。实现过程,如图 66.1.4.3 所示: 图 66.1.4.3 中,单元 1 和单元 2 同时开始向总线发送数据,开始部分他们的数据格式是一样的,故无法区分优先级,直到 T 时刻,单元 1 输出隐性电平,而单元 2 输出显性电平,此时单元 1 仲裁失利,立刻转入接收状态工作,不再与单元 2 竞争,而单元 2 则顺利获得总线使用权,继续发送自己的数据。这就实现了仲裁,让连续发送显性电平多的单元获得总线使用权。
关于 CAN 协议就讲到这里,关于 CAN 协议更详细的内容请参考《CAN 入门教程》。
3)32对CAN总线协议的硬件实现
在 STM32 互联型产品中,带有 2 个 CAN 控制器,而我们使用的 STM32F103ZET6 属于增强型,不是互联型,只有 1 个 CAN 控制器。双 CAN 的框图如图 31.1.10 所示: CAN 接收到的有效报文,被存储在 3 级邮箱深度的 FIFO 中。 FIFO 完全由硬件来管理,从而节省了 CPU 的处理负荷,简化了软件并保证了数据的一致性。 更多详情:看STM32F1 开发指南(库函数版)
2、I2C总线- - -串行- - -内部总线- - -cpu中的主干道
1)I2C总线特性
I2C总线是由NXP(原PHILIPS)公司设计,有十分简洁的物理层定义,其特性如下: a)只要求两条线路:一条串行数据线SDA(Serial data line),一条串行时钟线SCL(Serial clock line)serial 连续的;连载的; b)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的软件设定地址,; c)它是一个真正的,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏; d)串行的8 位双向位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s; e)连接到相同总线的IC 数量只受到总线的400pF 限制。
其典型的接口连线如下: 对于主控SOC或MCU,I2C 是支持多从机的,也就是一个 I2C 控制器下可以挂多个 I2C 从设备(Device A,(Device B,Device C),这些不同的 I2C从设备有不同的器件地址,这样 I2C 主控制器就可以通过 I2C 设备的器件地址访问指定的 I2C设备了
2)I2C总线协议
a)起始位 顾名思义,也就是 I2C 通信起始标志,通过这个起始位就可以告诉 I2C 从机,“我”要开始进行 I2C 通信了。在 SCL 为高电平的时候, SDA 出现下降沿就表示为起始位,如图 26.1.1.2 所示:
b)停止位 停止位就是停止 I2C 通信的标志位,和起始位的功能相反。在 SCL 位高电平的时候, SDA出现上升沿就表示为停止位,如图 26.1.1.3 所示
c)数据传输 I2C 总线在数据传输的时候要保证在 SCL 高电平期间, SDA 上的数据稳定,因此 SDA 上的数据变化只能在 SCL 低电平期间发生,如图 26.1.1.4 所示:
d)应答信号 当 I2C 主机发送完 8 位数据以后会将 SDA 设置为输入状态,等待 I2C 从机应答,也就是等到 I2C 从机告诉主机它接收到数据了。应答信号是由从机发出的,主机需要提供应答信号所需的时钟,主机发送完 8 位数据以后紧跟着的一个时钟信号就是给应答信号使用的。从机通过将 SDA 拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
AT24C02(可擦除可编程只读存储器)有三根地址线来进一步确定I2C设备的地址。说是进一步确定,是因为对于这类的I2C设备来说 其地址的一部分已经是确定好了的。 例如:数据手册上写道: Device Address 1K/2K 1 0 1 0 A2 A1 A0 R/W 也就是说对于改I2C设备来说,地址的高8位已经确定了为1010,而低四位则有A2 ----A0来确定 R/W来确定读写方向,读还是写。 例如,我们把A0 --A3全部拉低(出厂一般默认把A0 --A3全部拉低),则该设备的地址为0xA0. 在ARM中,读写方向是用寄存器的单独一位来确定的,有一个7位的域用来保存设备地址。 所以该I2C设备在ARM I2C总线上的地址为0xA0 右移一位 0x50.即1010 0000(B)右移一位,变成101 0000(B) 如果A0–A2 有其他选择的话,则可以根据上述原则求得设备地址。
e)I2C 写时序 主机通过 I2C 总线与从机之间进行通信不外乎两个操作:写和读, I2C 总线单字节写时序如图 26.1.1.5 所示: 图 26.1.1.5 就是 I2C 写时序,我们来看一下写时序的具体步骤: 1)、开始信号。 2)、发送 I2C 设备地址,每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为1 的话表示这是一个读操作,为 0 的话表示这是一个写操作。 3)、 I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作。 4)、从机发送的 ACK 应答信号。 5)、重新发送开始信号。 6)、发送要写写入数据的寄存器地址。 7)、从机发送的 ACK 应答信号。 8)、发送要写入寄存器的数据。 9)、从机发送的 ACK 应答信号。 10)、停止信号。 11)注意:不处理应答信号时OLED显示屏,体现了设备对芯片总线的协议的灵活匹配
/** * @brief I2C发送一个字节 * @param Byte 要发送的一个字节 * @retval 无 */
void OLED_I2C_SendByte(uint8_t Byte)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
OLED_W_SDA(Byte & (0x80 >> i));//清零7位,传输位保留。&:位与指令,0x80=1000 0000(B)
OLED_W_SCL(1);
OLED_W_SCL(0); //SDA 上的数据变化只能在 SCL 低电平期间发生
}
OLED_W_SCL(1); //额外的一个时钟,不处理应答信号
OLED_W_SCL(0);
}
/** * @brief OLED写命令 * @param Command 要写入的命令 * @retval 无 */
void OLED_WriteCommand(uint8_t Command)
{
OLED_I2C_Start(); //主机发送起始信号。
OLED_I2C_SendByte(0x78); //主机发送要读取的 I2C 从设备地址0x78。
OLED_I2C_SendByte(0x00); //发送要写写入数据的寄存器地址0x00。0x00的最高两位Co位和D/C#都位0, Co:连续位 D/C#:数据/命令选择位。 D/C#=1时为数据字节,接下来发来的数据被存储在GDDRAM中;D/C#=0时为命令字节,接下来发来的数据写在相应的命令寄存器中
OLED_I2C_SendByte(Command); //发送要写入寄存器的数据。
OLED_I2C_Stop(); //主机发送停止信号。
}
f)I2C 读时序 I2C 总线单字节读时序如图 26.1.1.6 所示 I2C 单字节读时序比写时序要复杂一点,读时序分为 4 大步,第一步是发送设备地址,第二步是发送要读取的寄存器地址,第三步重新发送设备地址,最后一步就是 I2C 从器件输出要读取的寄存器值,我们具体来看一下这几步。 1)、主机发送起始信号。 2)、主机发送要读取的 I2C 从设备地址。 3)、读写控制位,因为是向 I2C 从设备发送数据,因此是写信号。 4)、从机发送的 ACK 应答信号。 5)、重新发送 START 信号。 6)、主机发送要读取的寄存器地址。 7)、从机发送的 ACK 应答信号。 8)、重新发送 START 信号。 9)、重新发送要读取的 I2C 从设备地址。 10)、读写控制位,这里是读信号,表示接下来是从 I2C 从设备里面读取数据。 11)、从机发送的 ACK 应答信号。 12)、从 I2C 器件里面读取到的数据。 13)、主机发出 NO ACK 信号,表示读取完成,不需要从机再发送 ACK 信号了。 14)、主机发出 STOP 信号,停止 I2C 通信。
g)I2C 多字节读写时序 有时候我们需要读写多个字节,多字节读写时序和单字节的基本一致,只是在读写数据的时候可以连续发送多个自己的数据,其他的控制时序都是和单字节一样的。
3)32对I2C总线协议的硬件实现
三、针对某特定的总线的简述
1、串行外设接口SPI(Serial Peripheral Interface)总线
串行外设接口(SPI)允许芯片与外部设备以半/全双工、同步、串行方式通信。此接口可以被配置成主模式,并为外部从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。 它可用于多种用途,包括使用一条双向数据线的双线单工同步传输,还可使用CRC校验的可靠通信。 SPI协议详解(图文并茂+超详细)看时注意:所有USB设备都会响应主机向设备默认控制管道(Control Pipe)上发送的请求(requests)。 这些请求是使用控制传输(control transfers)进行的。请求和请求的参数通过Setup packet发送给设备
2、通用串行总线USB(Universal Serial Bus)
USB功能描述 1)端点 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对USB设备进行访问。但是在设备内部地址会被分的更细,设备会分出一些端点来,每个端点在设备都会有唯一的端点号,这个端点号是设计设备时给定的。如端点0,端点1等。一个设备最多可以包含16个端点,每个端点的地址为0-15。(网上也有说几十个的,有待考究) 其中每个端点地址对应一个方向。例如端点3-IN,端点3-OUT,这两个含义完全不同。但是需要注意其中的一个特殊端点–端点0,每个USB设备必须要有一个端点0,其作用为对设备枚举和对设备进行一些基本的控制功能,端点0也被称为控制端点。并且它与其他的端点还有一个不同之处在于端点0的数据传输方向是双向的,即端点0既可以给主机发送数据,也可以接收主机发送过来的数据,而其它端点均为单向。 虽然有16个端点,但通常我们只用到3个,如下: 1)、EP0:做传输配置和控制信息; 2)、EP1:做数据输入IN_EP; 3)、EP2:做数据输出OUT_EP。 2)四条线 一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(注意哦,与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500MA(可以在编程中设置的,至于硬件的实现机制,就不要管它了)。 3)其他 USB模块为PC主机和微控制器所实现的功能之间提供了符合USB规范的通信连接。 PC主机和微控制器之间的数据传输是通过来完成的,该数据缓冲区能被USB外设直接访问。这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小所决定,。 USB模块同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。 每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。当USB模块识别出一个有效的功能/端点的令牌分组时, (如果需要传输数据并且端点已配置)随之发生相关的数据传输。 USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。在数据传输结束时, USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的处理程序,微控制器可以确定: ● 哪个端点需要得到服务 ● 产生如位填充、格式、 CRC、协议、缺失ACK、缓冲区溢出/缓冲区未满等错误时,正在进行的是哪种类型的传输。USB模块对同步传输和高吞吐量的批量传输提供了特殊的双缓冲区机制,在微控制器使用一个缓冲区的时候,该机制保证了USB外设总是可以使用另一个缓冲区。在任何不需要使用USB模块的时候,通过写控制寄存器总可以使USB模块置于低功耗模(SUSPEND模式)。在这种模式下,不产生任何静态电流消耗,同时USB时钟也会减慢或停止。通过对USB线上数据传输的检测,可以在低功耗模式下USB模块。也可以将一特定的中断输入源直接连接到唤醒引脚上,以使系统能立即恢复正常的时钟系统,并支持直接启动或停止 时钟系统。
USB通信协议详解
3、通用同步异步收发器USART(UniversalSynchronous/AsynchronousReceive/Transmit)
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信 UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) UART协议快速扫盲(图文并茂+超详细)