通讯协议(串口通信,SPI通信,I2C通信,CAN通信)

📅 2026/6/24 6:40:20
通讯协议(串口通信,SPI通信,I2C通信,CAN通信)
一 串口通信1、双工串口通信是全双工通信只能进行点对点的通信。RS232和RS485同串口通信一样都是异步通信。、帧格式串口通信的帧格式起始位低电平 数据位 停止位高电平。数据位一般是8位但也存在其他可能。RS232标准和RS484标准的帧格式和串口通信的帧格式相同。、波特率波特率Baud rate表示单位时间内传输的符号信号元素的数量其单位是“波特”英文表示为“Baud”简写为“Bd”。1波特即指每秒传输1个符号。例如波特率为 9600 Bd意味着每秒钟可以传输9600个符号。符号可以是二进制的 0 和 1也可以是多进制的状态。在二进制系统中一个符号代表1位信息此时波特率和比特率数值相等而在多进制系统中一个符号可以代表多个比特信息比特率就会大于波特率。比特率指单位时间内传输的二进制位数单位是比特每秒bit/sbps。二者关系比特率 波特率×单个调制状态对应的二进制位数。例如在四进制每个符号有 4 种不同状态可表示 2 个比特信息系统中若波特率是 1200 Bd那么比特率就是 1200×2 2400 bit/s。、串口通信的高低电平高电平范围.~5V低电平范围V.V这样的电平范围就代表了这种传输方式抗干扰能力比较差并且传输距离很短左右二、RS232标准1、产生原因由于串口通信的传输距离比较短且抗干扰能力比较差所以美国电子工业联盟制定了RS232标准。2、连接方式和双工RS232通信标准是全双工通信只能进行点对点的通信3、RS23标准的高低电平RS232标准在MAX232电平转换芯片的作用下会将高电平变得更高低电平变得更低使得高低电平的范围变得更大进而提高数据传输的距离和抗干扰性能。MAX232电平转换芯片反过来压缩电平范围使得高低电平范围变小。下图展示TTL电平到232电平转换的过程反过来就是232电平到TTL电平的转换过程。三、RS485标准1、双工RS485标准是半双工通信可以进行一对多的通信2、RS485的传输电平RS485传输采用差分形式传输通过485电平转换芯片可将TTL电平转换为差分电平也可将485电平信号转换为TTL电平。TTL电平高电平代表逻辑1低电平代表逻辑0差分信号传输过程中逻辑1和逻辑0分别如图所示。根据不同的芯片手册以下面的芯片为例当A的电平高于B的电平时代表逻辑0反之代表逻辑1。差分信号传输过程中因为是双绞线的形式所以信号在传输过程中的抗干扰性能更强且传输距离更远。总之不论是RS232标准还是RS485标准他们都是在串口通信的基础上对电器层面进行了改进只定义了物理层对编程几乎没有影响因此在了解串口通讯的代码逻辑后便可以直接将串口代码使用在RS323或者RS485标准中。四、SPI通信1、连接方式SPI通信是芯片与芯片之间的通信采用一主多从、全双工、同步通信方式。SPI通讯使用四根信号线SS片选信号线一般主机向对应从机的SSX发送低电平就代表与该从机建立通信。具体是高电平代表片选还是低电平代表片选可以查阅从机对应的芯片手册。MOSI主设备发送从设备接收信号线主设备从这跟线向从机发送信息从设备从这根线接收主设备发送过来的信息。MISO从设备发送主设备接收信号线从设备从这根线向主设备发送信息主设备从这跟线接收从机发送过来的信息。SCK时钟信号线由主设备产生建立主从设备之间的通信时钟。波形图如下2、读写数据方式一下以主设备和93C46(EPROM)通信为例讲述SPI的通信过程建立通信首先从存储器93C40的数据手册上查到当SS1(片选信号)发送高电平时代表主设备片选到了存储器93C46。当主机通过SS1端口向存储器93C46发送高电平时单片机和存储器93C46就建立了通讯。写数据的过程如下比如当我们要给存储器93C46的0X01地址写入数据0000 1111时通过查看存储93C46的使用手册发现他写读写数据的帧格式为下图所示所以单片机通过MOSI端口向存储器的MOSI端口发送101000000100001111的一帧数据。数据解释起始位1操作码01地址00000 01数据00001111明白发送数据帧格式后搭配片选信号、时钟信号就可以建立起从单片机向存储器93C46的写数据操作。从存储器93C46的使用手册上发现该芯片的待机电平为低电平当片选信号为高电平时钟信号处于上升沿时数据信号才会被采集。类似的数据采集方式一共有四种待机电平为低电平时钟上升沿数据信号被采集待机电平为低电平时钟下降沿数据信号被采集待机电平为高电平时钟上升沿数据信号被采集待机电平为高电平时钟下降沿数据信号被采集读数据的过程如下比如当我们要从存储器93C46的0X01地址读数据时通过查看存储93C46的使用手册发现他写读写数据的帧格式为下图所示所以单片机想要读取存储器93C40位于0X01地址位的数据时得先从自己的MOSI端口给存储器的MOSI端口发送1100000001XXXXXXXX一帧数据这里单片机只是向存储器发送读数据的指令没有发送数据所以数据没乱填就行然后存储器就会从自己的MISO端口向单片机的MISO端口发送位于存储器93C40的0X01地址位的数据00001111。这样就完成了单片机从存储器OX01地址位读数据的操作。数据解释1100000001XXXXXXXX1起始位10操作码00000 01地址XXXXXXXX随便写00001111位于存储器0X01地址处的数据上边例子中写入的数据是000011118位数据读到的也是8位数据这里不能单纯的认为SPI通信传输的数据数据位数是8位实际中具体多少位要看从机的用户手册只要符合SPI的这四种采样模式和电气属性它就属于SPI通讯SPI通信全双工模式一共有四种:结合PPT和软件SPI代码一同消化前面的介绍不太准确模式0 待机电平为低电平时钟上升沿移入数据下降沿移出数据主从机模式1 待机电平为低电平时钟上升沿移出数据下降沿移入数据模式2 待机电平为高电平时钟上升沿移入数据下降沿移出数据模式3 待机电平为高电平时钟上升沿移出数据下降沿移入数据五、I2C通信1、连接方式I2C通信是总线通信半双工、同步通信。两根信号线时钟线和数据线。通信时时两根信号线共同作用时钟由主设备控制数据线主从共用。2、通信数据帧格式设备地址从设备的地址例如24C02设备的地址是1010 000寄存器地址从设备中寄存器的地址写数据帧格式指定地址写数据以下假定是主机给从机写数据S起始位SCL处于高电平期间SDA由高电平转换为低电平Send Byte 0X00从机地址在SCL高电平期间读取到的SDA电平1101 0000RA从机给主机的应答信号此时RA0是主机和从机综合作用的结果因为此时主机释放SDA线SDA即将处于高电平然后主机再把SDA线的控制权给了从机从机回复0SDA线又即将处于低电平两者线与作用下使得SDA在该时刻处于低电平RA0所以可以看出此时的时钟比较长。Send Byte 0X19从机寄存器地址RA从机给主机的应答信号Send Byte 0XAA主机给0X00从机的0X19寄存器写入0XAA数据RA从机给主机的应答信号P停止位SCL高电平期间SDA由低电平转为高电平读数据帧格式两种读的格式当前地址读数据、指定地址读数据一、当前地址读当前地址指针指针上电默认一般是指向0地址每次写入和读出一个字节后指针就会自加一在调用当前地址读的时序时由于主机没有指定读那个寄存器的地址那么从机就会返回当前指针指向的寄存器的值eg刚在0x19的位置写入0xAA此时使用当前地址读读取到的数据就是0x1A寄存器里的值S起始位Send Byte 0xD1从机地址RA从机应答Receive Byte 0X0F主机接收到从机发送过来的数据。此时从机得到了主机的允许可以在SCL处于低电平期间写入SDA然后主机在SCL高电平期间读取SDA。这也就是这段时期内时钟比较长得到原因。SA主机给从机发送的应答信号SA1代表非应答SA0代表应答SA1代表读取到这个字节的数据就结束了SA0代表后续还会继续读取一个字节P停止位二、指定地址读指定地址写数据当前地址读数据的叠加前两段用于找到指定的从机的寄存器地址后两段用于在该地址下读数据六、CAN通信1、CAN通信简介CAN通讯是半双工、异步、多设备通信通信时要设置合适的波特率。2、设备连接方式3、电平标准4、通讯数据帧格式起始位固定为0。识别码通信范围内的机器编号参与CAN通信的每个机器都有独属于自己的识别码。RTR位用来区分数据帧0或远程请求帧1。控制码控制数据长度。IDE位区分标准格式和拓展格式IDE是0代表识别位有11位IDE为1代表识别位有 29位。空闲位始终置0。DLC位由4个二进制数表示0001代表传输的数据是8位0101代表传输的数据是40 位数据位蕴含发送的数据信息CRC位接收设备会根据接收到的数据计算出他的CRC位如果与接收到的CRC位不一致说明 接收到的数据存在问题发送端就会重新发送一遍数据帧。CRC界定符始终为1目的是为了把前后两段数据隔开。ACK码ACK确认槽(做应答,发送方发送完一帧数据后在应答这一位发送方释放总线总线回归默认状态隐性1如果接收方收到数据在ACK槽这一位把总线拉开使总线呈现显性的状态发送方释放总线后在ACK槽会读取总线状态如果发送方读取为显性0说明有接收方正确接收数据若为隐性1 说明发送失败发送方可以配置自动重发也可以什么都不做总之发送方知道发送状态就行。总之这一位由接收方控制接收方接收到数据时这一位被接收方置0代表接收到数据当接收方没有接收到数据时这一位被接受方置1代表没有接收到数据ACK界定位一定是逻辑1作用是把后边的数据隔开。结束位7位数据位都是1代表这一帧数据传输结束注意当两个设备同时发送信息时那个优先答这时候看识别码识别码不仅是身份的象征还代表了优先级当这两个信号同时产生时从左向右找不同假设信号是从左端发送发现不同后看谁是0谁就有限发送。