java怎么拦截某个对象
264
2022-11-06
几种常用的嵌入式板上通信接口详解
通过将设备地址线硬件连接到所需的逻辑电平上,可以分配I2C设备的地址。在嵌入式设备中,当设计嵌入式硬件的时候,需要分配各种I2C设备的地址并完成硬件连接。系统与I2C从设备通信的工作顺序如下:
(1) 主设备将总线上的时钟线(SCL)拉高到高电平。
(2) 当SCL线处于高电平逻辑(这是数据传输的启动条件)的时候,主设备将数据线(SDA)拉低到低电平。
(3) 主设备通过SDA线,将从设备地址(具有7位或10位宽度)发送到通信目的地址。从设备会在SCL线上产生时钟脉冲,用于同步位接收。需要说明的是,系统总是首先传输数据的MSB(最高位)。在时钟信号处于高电平期间,总线中的数据是有效的。
(4) 根据需求,主设备发送读位或写位(位值等于1意味着读操作,位值等于0意味着写操作)。
(5) 主设备等待从设备发出确认位。在发送读/写操作命令的同时,从设备的地址也会发送到总线上。对于连接到总线上的从设备,会将接收到的地址与分配的地址进行比较。
(6) 如果从设备接收到来自主设备的指令并且地址正确,那么从设备通过SDA线发送确认位(值为1)。
(7) 主设备接收到确认位之后,如果操作指令是向设备写入数据,就通过SDA线向从设备发送8位数据。如果操作指令是从设备读出数据,从设备将通过SDA线将数据发送给主设备。
(8) 对于写入操作,在字节传输结束之后,主设备等待从设备发送确认位;对于读出操作,在字节传输结束之后,主设备向从设备发送确认位。
(9) 当时钟线SCL处于逻辑高电平(表示停止)的时候,通过将SDA线拉高到高电平,主设备可以终止数据传输。
I2C总线支持三种不同的数据速率:标准模式(数据速率为100kb/秒,即100kbps)、快速模式(数据速率为400kb/秒,即400kbps)、高速模式(数据速率为3.4Mb/秒,即3.4Mbps)。第一代I2C设备设计所支持的数据速率只有100kbps,新一代I2C设备则能够以高达3.4Mbps的数据速率工作。
(3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。
(4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。
图2-27显示了SPI总线上主设备和从设备的连接关系图。
主设备负责产生时钟信号,并通过将相应从设备的从设备选择信号拉低为低电平,选通所需的从设备。在没有选通的时候,所有从设备的数据输出线MISO都悬空处于高阻态。
SPI的工作是基于移位寄存器的;为了实现数据传输或数据接收,主设备和从设备包含了专用移位寄存器。移位寄存器的长度取决于具体设备,通常是8的整数倍。数据在从主设备传输到从设备的过程中,主设备移位寄存器中的数据从MOSI管脚移出,然后通过从设备的MOSI管脚,输入到从设备的移位寄存器中。与此同时,由从设备移位寄存器移位出来的数据,通过MISO管脚,输入到主设备的移位寄存器中。也就是说,主设备和从设备的移位寄存器构成了一个循环缓冲区。对于特定类型的器件,可以通过配置寄存器(比如,对于Motorola公司生产的68HC12型控制器,需要配置SPI控制寄存器的LSBF位),决定最先发送的数据位是最高位还是最低位。
与I2C总线相比,SPI总线更适于数据流传输。SPI的不足之处在于,SPI不支持数据确认机制。
基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。
起始位用于告知接收设备:数据字节将要到达接收端。然后,接收设备按照设定的波特率,选中其数据接收线。如果波特率是x比特/秒,那么每个比特可用的时隙是1/x秒。接收设备会精确地在比特可用时隙一半的位置,定时选中数据接收线。如果通信使用了奇偶校验功能,那么UART发送设备会在发送数据流中增加奇偶校验位(取值为1,表示传输比特流中含有奇数个1;取值为0,则表示传输比特流中含有偶数个1)。UART接收设备计算接收到的数据位的奇偶校验结果,并与接收到的奇偶校验位进行比较。UART接收设备丢弃掉接收比特流中的起始位、结束位、奇偶校验位,并将接收到的串行比特数据转换成字(比如,考虑8比特对应于1个字节的情况,接收到8比特,最先接收到的数据位是LSB,最后接收到的数据位是MSB)。
为了实现正确的通信,发送设备的数据传输线应该连接到接收设备的数据接收线上。图2-28显示了UART的连接图。
如今,大多数微处理器/控制器都集成有UART功能,并为串行数据传输与接收提供内置式的指令支持。
4. 1-Wire接口
每台1-Wire设备都具有全球唯一可识别的64位识别码信息,存储在设备内部。对于多台从设备连接到1-Wire总线上的情况,通过解读唯一的识别码,可以寻址总线上存在的各台独立设备。识别码由以下三个部分组成:8位的类别码、48位的序列号以及前56比特数据的8位CRC校验结果。与1-Wire从设备通信的具体流程如下:
(1) 主设备将复位脉冲发送到1-Wire总线上。
(2) 总线上的从设备通过确认脉冲予以回应。
(4) 主设备发送读/写命令,对从设备的内部存储器或寄存器进行读/写操作。
(5) 主设备将数据由从设备读出,或者是将数据写入从设备。
1-Wire总线上的所有通信都是由主设备发起的。其中,通信的最小间隔是时长为60微秒的时隙。复位脉冲占用8个时隙。在通信的开始阶段,主设备将1-Wire总线拉低到低电平,并持续8个时隙(即480 μs),从而发出复位脉冲。如果总线上存在从设备,而且已经准备好进行通信,那么从设备将通过确认脉冲来回应主设备;也就是说,从设备将1-Wire总线拉低到低电平,并持续1个时隙(即60 μs)。为了在1-Wire总线上写入位值1,需要总线主设备将总线拉低,其持续时间为1~15 μs,然后在该时隙的其余时间段释放总线。为了在总线上写入位值0,主设备需要将总线拉低,其持续时间至少为1个时隙(60 μs),最多为2个时隙(120 μs)。为了由从设备读出位值,主设备需要将总线拉低,并持续1~15 μs。为了响应主设备的读数据请求,如果从设备想要发送位值1,那么从设备只需要在该时隙的其余时间段释放总线;如果从设备想要发送位值0,那么从设备需要在该时隙的其余时间段将总线拉低。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~