admin管理员组

文章数量:1516870

本文简单的描述了在实际应用中会碰到的一些总线协议,让各位读者对实际系统中的总线有个概念上的理解。

一、I2C

I2C(Inter Integrated Circuit) 总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。 I2C 总线产生于在 80 年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。

1 、I2C 总线特点
I2C 总线最主要的优点是其 简单性和有效性。由于接口直接在组件之上,因此 I2C 总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达 25 英尺 ,并且能够以 10Kbps 的最大传输速率支持 40 个组件。 I2C 总线的另一个优点是,它支持多主控 (multimastering) , 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
2  、I2C 总线工作原理
2.1 总线的构成及信号类型
I2C 总线是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、 IC IC 之间进行双向传送,最高传送速率 100kbps 。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中, I2C 总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。 CPU 发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号: SCL 高电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
目前有很多半导体集成电路上都集成了 I2C 接口。带有 I2C 接口的单片机有: CYGNAL C8051F0XX 系列, PHILIPSP87LPC7XX 系列, MICROCHIP PIC16C6XX 系列等。很多外围器件如 存储器、监控芯片等也提供 I2C 接口
3 、 总线基本操作
I2C 规程运用主 / 从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。 主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟( SCL )控制总线的传输方向,并产生起始和停止条件。 SDA 线上的数据状态仅在 SCL 为低电平的期间才能改变, SCL 为高电平的期间, SDA 状态的改变被用来表示起始和停止条件。
3.1 控制字节
在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义, EEPROM 一般应为 1010 ),接着三位为片选,最后一位为读写位,当为 1 时为读操作,为 0 时为写操作。
3.2 写操作
写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。
3.3 读操作
读操作有三种基本操作:当前地址读、随机读和顺序读。图 4 给出的是顺序读的时序图。应当注意的是:最后一个读操作的第 9 个时钟周期不是 不关心 。为了结束读操作,主机必须在第 9 个周期间发出停止条件或者在第 9 个时钟周期内保持 SDA 为高电平、然后发出停止条件。
I2C 总线的应用中应注意的事项总结为以下几点 :
1 ) 严格按照时序图的要求进行操作,
2 ) 若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。
3 ) 程序中为配合相应的传输速率,在对口线操作的指令后可用 NOP 指令加一定的延时。
4 ) 为了减少意外的干扰信号将 EEPROM 内的数据改写可用外部写保护引脚(如果有),或者在 EEPROM 内部没有用的空间写入标志字,每次上电时或复位时做一次检测,判断 EEPROM 是否被意外改写。

二、I2S

I2S 3 个主要信号: 1. 串行时钟 SCLK ,也叫位时钟( BCLK ),即对应数字音频的每一位数据, SCLK 都有 1 个脉冲。 SCLK 的频率 =2× 采样频率 × 采样位数 2. 帧时钟 LRCK ,用于切换左右声道的数据。 LRCK “1” 表示正在传输的是左声道的数据,为 “0” 则表示正在传输的是右声道的数据。 LRCK 的频率等于采样频率。 3. 串行数据 SDATA ,就是用二进制补码表示的音频数据。 I2S Inter-IC Sound Bus )是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的 I2S 标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。 I2S 3 个主要信号: 1. 串行时钟 SCLK ,也叫位时钟( BCLK ),即对应数字音频的每一位数据, SCLK 都有 1 个脉冲。 SCLK 的频率 =2× 采样频率 × 采样位数 2. 帧时钟 LRCK ,用于切换左右声道的数据。 LRCK “1” 表示正在传输的是左声道的数据,为 “0” 则表示正在传输的是右声道的数据。 LRCK 的频率等于采样频率。 3. 串行数据 SDATA ,就是用二进制补码表示的音频数据。

有时为了使系统间能够更好地同步,还需要另外传输一个信号 MCLK ,称为主时钟,也叫系统时钟( Sys Clock ),是采样频率的 256 倍或 384 倍。 I2S 格式的信号无论有多少位有效数据,数据的最高位总是出现在 LRCK 变化(也就是一帧开始)后的第 2 SCLK 脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

随着技术的发展,在统一的 I2S 接口下,出现了多种不同的数据格式。根据 SDATA 数据相对于 LRCK SCLK 的位置不同,分为左对齐(较少使用)、 I2S 格式(即飞利浦规定的格式)和右对齐(也叫日本格式、普通格式)。 为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对 I2S 格式来说数据长度可以不同。

三、SPI

串行外围设备接口 SPI serial peripheral interface )总线技术是 Motorola 公司推出的一种同步串行接口, Motorola 公司生产的绝大多数 MCU (微控制器)都配有 SPI 硬件接口,如 68 系列 MCU SPI 用于 CPU 与各种外围器件进行全双工、同步串行通讯。 SPI 可以同时发出和接收串行数据。它只需四条线就可以完成 MCU 与各种外围器件的通讯,这四条线是:串行时钟线( CSK )、主机输入 / 从机输出数据线( MISO )、主机输出 / 从机输入数据线( MOSI )、低电平有效从机选择线 CS。这些外围器件可以是简单的 TTL 移位寄存器,复杂的 LCD 显示驱动器, A/D D/A 转换子系统或其他的 MCU 。当 SPI 工作时,在移位寄存器中的数据逐位从输出引脚( MOSI )输出(高位在前),同时从输入引脚( MISO )接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主 SPI 的时钟信号( SCK )使传输同步。

SPI主要特点有: 可以同时发出和接收串行数据;

· 可以当作主机或从机工作;

· 提供频率可编程时钟;

· 发送结束中断标志;

· 写冲突保护;

· 总线竞争保护等。

SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。

四、USB

USB(Universal Serial Bus)是1995年Microsoft、Compaq、IBM等公司联合制定的一种新的PC串行通信协议。USB协议出台后得到各PC厂商、芯片制造商和PC外设厂商的广泛支持。USB本身也处于不断的发展和完善中,从当初的0.7、0.8到现在广泛采用的1.0、1.1版本到即将被采用的2.0版本。USB外设在国外以惊人的速度发展,迄今为止,各种USB的外设已经有上千种。那么,USB为什么如此受亲睐呢?这要从它自身所具有的很多优点谈起。
1. PC为什么急需USB
随着PC的广泛应用,其外设也越来越多,打印机、鼠标、扫描仪、游戏杆、音箱...。每个外设都需要通过一个接口与PC相连。外设多了,PC的接口自然也就不够用了。在很多特定的应用场合,如工业数据采集等领域,常常用采集板卡来完成工作,而每一个板卡自然会占用一个PC插槽。PC插槽就那么几个,要是采集点多了怎么办呢? PC外设安装过程中比较麻烦的另一件事情是在加减设备时,必须关掉电源,加减设备完成之后再从新启动机器。对于板卡式的外设就更加麻烦了,您不得不打开机箱,弄得满头大汗,一不小心,汗水滴到主板上,机器就死翘翘了。我就碰到过这样的事情。

USB的出现就能够为您完全解决掉上面提到的这些尴尬,每台PC通过USB端口最多可以接127个外设!把您所有的东西全接上来吧,没问题!还有,USB完全是PNP的,在您第一次安装完成以后,加减设备只需要拔出或插上USB插头就一切OK了,不必理会机器是开还是关,就这么简单。
可不要因为慢得象蜗牛的232而使你联想到串行就代表慢。USB有快速和慢速工作方式,传输速率分别为12Mbps和1.5Mbps,比232快了不知道多少倍。


2. USB的结构框架
root hub
______________|___________
|                                                  |
hub                                            hub
___|______                      ________|________
|    |      |     |                        |        |               |          |
d1 d2   d3 h1                     h2     d4          d5       d6
d*   外设            h*    hub


上图显示了 USB 的拓扑结构。
PC 主板上的那两个插口,就是 root hub root hub 是一个 USB 系统的总控制端口。它既可以直接接外设,也可以通过 hub 控制更多的外设。 USB hub 结构类似通常的网络集线器,有一个 upper link 和很多子端口,每个子端口可以接一个外设,也可以再通过一个 hub 接入更多外设,直到所有外设加起来到 127 为止。

3. USB 设备的加载过程
USB 设备接入 hub root hub 后,主机控制器和主机软件 (host controller & hos
t software) 能自动侦测到设备的接入。然后 host software 读取一系列的数据用于确认
设备特征,如 vendor ID, product ID, interface 工作方式,电源消耗量等参数。之后
主机分配给外设一个单独的地址。地址是动态分配的,各次可能不同。在分配完地址之后对设备进行初始化,初始化完成以后就可以对设备进行 IO 操作了。
4. USB 的适用范围
其实除了象显卡这种需要极高数据量和一些实时性要求特别高的控制设备,几乎所有的 PC 外设都可以移植到 USB 上来。而事实上国外几乎已经做到了这一点。我想对于国内的开发者来说,在鼠标、键盘等产品上就不必去和国外竞争了。但即使这样, USB PC 外设仍然有大得不可限量的发展空间。我归纳了以下几个大类供开发者参考:
1. 传统 PC 外设,象鼠标、键盘、音箱、游戏杆、扫描仪、打印机等。
2. 基于 PC 的通信设备,如 Modem, ISDN
3. 端口转接器,如 USB-->232, USB-->LPT 等,以适应原来的设备。
4. 具有中国特色的设备,象汉字输入笔那样的东西。
5. 工业领域。 USB 在这个领域产生的影响是惊人的,我将另外专门写关于这方面的文章。

五、PCI

PCI 基本总线协议传输机制是猝发成组数据传输。一个分组由一个地址相位和一个或多个数据相位组成。
1 PCI 总线的传输控制
PCI 总线上所有的数据传输基本上都是由以下三条信号线控制的:
FRAME# :由主设备驱动,说明一次数据传输周期的开始和结束。
IRDY# :由主设备驱动,表示主设备已经作好传送数据的准备。
TRDY# :由从设备驱动,表示从设备已经作好传送数据的准备。
当数据有效时,数据源设备需要无条件设置 xRDY# ,接收方可以在适当的时间发出 xRDY# 信号。 FRAME# 信号有效后的第一个时钟前沿是地址相位的开始,此时,开始传送地址信息和总线命令,下一个时钟前沿进入一个或多个数据相位。每当 IRDY# TRDY# 同时有效时,所对应的时钟前沿就使数据在主从设备之间传送。在此期间,可由主设备或从设备分别利用 IRDY# TRDY# 的无效而插入等待周期。
一旦主设备设置了 IRDY# ,将不能再改变 IRDY# FRAME# ,直到当前的数据相位完成为止,而此期间不管 TRDY# 的状态是否发生变化。一旦从设备设置了 TRDY# ,就不能改变 DEVSEL# TRDY# STOP# ,直到当前的数据相位完成为止。也就是说,只要数据传输已经开始,那么在当前数据相位结束之前,不管是主设备还是从设备都不能撤消命令,必须完成数据传输。
最后一次数据传输时 ( 可能紧接地址相位之后 ) ,主设备应撤消 FRAME# 信号而建立 IRDY# ,表明主设备已作好了最后一次数据传输的准备。当从设备发出 TRDY# 信号,表明最后一次数据传输已经完成,接口转入空闲状态,此时 FRAME# IRDY# 均被撤消。
对于 PCI 总线的传输,可总结出以下几条规则:
①FRAME# IRDY# 决定总线的忙/闲状态。当其中一个有效时,表示总线忙;两个都无效时,总线进入空闲状态。
一旦 FRAME# 被置为无效,在同一传输期间不能重新置为有效。
除非设置 IRDY# ,一般情况下不能设置 FRAME# 无效 ( FRAME# 无效后的第一个时钟沿 IRDY# 必须保持有效 )
一旦主设备已使 IRDY# 有效,在当前数据相位完成前,不能改变 IRDY# FRAME# 的状态。
在完成最后一个数据相位之后的时钟周期主设备必须使 IRDY# 无效。
2 PCI 总线的寻址
PcI 总线定义了三种物理地址空间:内存地址空间、 I O 地址空间及配置地址空间,前两种为通常意义的地址空间,第三种配置地址空间用以支持 PCI 的硬件配置。
PCI 总线的地址译码是分散的,每个设备都有自己的地址译码逻辑,从而省去了中央译码逻辑。 PCl 支持对地址的正向译码和负向译码,所谓正向译码,是指总线上每个设备都监视地址总线上的访问地址,判断是否落在自己的地址范围内,译码速度较快。所谓负向译码,是指要接受未被其他设备在正向译码中接受的所有访问,因此,此种译码方式只能由总线上的一个设备来实现 ( 一般是连接标准扩展总线的桥 ) 。由于它要等到总线上其他所有设备都拒绝之后才能动作,所以速度较慢。负向译码对于标准扩展总线上地址空间零散的设备是很有用的。
I O 地址空间,所有韵 32 位地址都用来表示一个完整的字节地址。启动 I O 传输的主设备应确保 AD[1 0] 正确指示本次传输的最低有效字节 ( 即起始字节 ) 。字节允许信号和 AD[1 0] 一起指明传输的数据宽度和双字中被选中的字节,表 9 5 表示了 AD[1 0] 和初始数据相位中字节允许的有效组合。
六、SDIO

SDIO 总线和 USB 总线类似, SDIO 总线也有两端,其中一端是主机( HOST )端,另一端是设备端( DEVICE ),采用 HOST- DEVICE 这样的设计是为了简化 DEVICE 的设计,所有的通信都是由 HOST 端发出命令开始的。在 DEVICE 端只要能解溪 HOST 的命令,就可以同 HOST 进行通信了。

是同 SD 的总线一样的 , 其中有如下的几种信号

1. CLK 信号 :HOST DEVICE 的时钟信号 .

2. CMD 信号:双向的信号,用于传送命令和反应。

3. DAT0-DAT3 信号 : 四条用于传送的数据线。

4. VDD 信号 : 电源信号。

5. VSS1 VSS2: 电源地信号。

SDIO 总线定义中 ,DAT1 信号线复用为中断线。在 SDIO 1BIT 模式下 DAT0 用来传输数据, DAT1 用作中断线。在 SDIO 4BIT 模式下 DAT0-DAT3 用来传输数据,其中 DAT1 复用作中断线。

命令:

SDIO 总线上都是 HOST 端发起请求,然后 DEVICE 端回应请求。其中请求和回应中会数据信息。

1. Command: 用于开始传输的命令,是由 HOST 端发往 DEVICE 端的。其中命令是通过 CMD 信号线传送的。

2. Response: 回应是 DEVICE 返回的 HOST 的命令,作为 Command 的回应。也是通过

CMD 线传送的。

3. Data: 数据是双向的传送的。可以设置为 1 线模式,也可以设置为 4 线模式。数据是通过 DAT0-DAT3 信号线传输的。

SDIO 的每次操作都是由 HOST CMD 线上发起一个 CMD ,对于有的 CMD DEVICE 需要返回 Response ,有的则不需要。

对于读命令,首先 HOST 会向 DEVICE 发送命令,紧接着 DEVICE 会返回一个握手信号,此时,当 HOST 收到回应的握手信号后,会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个读传送完毕后, HOST 会再次发送一个命令,通知 DEVICE 操作完毕, DEVICE 同时会返回一个响应。

对于写命令,首先 HOST 会向 DEVICE 发送命令,紧接着 DEVICE 会返回一个握手信号,此时,当 HOST 收到回应的握手信号后,会将数据放在 4 位的数据线上,在传送数据的同时会跟随着 CRC 校验码。当整个写传送完毕后, HOST 会再次发送一个命令,通知 DEVICE 操作完毕, DEVICE 同时会返回一个响应。

1.SD卡的接口电路

2.SD卡的协议

SD卡的控制指令非常强大,支持SPI,SDIO模式,兼容MMC等。而且不同的

指令有不同的响应(3种),这在我们使用指令是要注意的。

3.S3C2410 SD卡控制器的介绍

SD卡控制器帮我们完成了协议上的很多工作,我们只需要按照协议配置寄存器

以及按照协议流程对SD卡操作就可以完成SD卡的功能了。

SDICON:完成SD卡基础配置,包括大小端,中断允许,模式选择,时钟使能等。

SDIPRE:对SDCLK的配置。

SDICARG:指令的参数存放在这里

SDICCON:控制指令形式的寄存器,配置SPI还是SD I指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等

SDICSTA:指令状态寄存器,指令是否超时,传送,结束,CRC是否正确等

SDIRSPO:反映SD的状态

SDITIMER:设置超时时间

SDIBSIZE:block的大小

SDIDCON:数据控制寄存器,配置是几线传输,数据发送方向,数据传送方式等。

SDIDSTA: 数据状态寄存器,数据是否发送完,CRC效验,超时等

SDIFSTA: FIFO状态积存器,DMA传输时否判断FIFO

SDIMSK:中断屏蔽

4.SD卡SDIO模式的驱动分析

4.1 SD卡的初始化

步骤是:1)配置时钟,慢速一般为400K,设置工作模式

2)发送CMD0,进入空闲态,该指令没有反馈

3)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈

4)发送CMD2,验证SD卡是否接入,长反馈

5)发送CMD3,读取SD卡的RCA(地址),短反馈

6)发送CMD7,使能SD卡

7)配置高速时钟,准备数据传输,一般20M~25M

8)发送CMD55+ACMD6配置为4bit数据传输模式

本文标签: 数据信号发送