1.1.1UART定义串行、异步、全双工通信协议 通用异步接收发送器没有共享时钟线。工作原理逐位传输传输数据的每个二进制位。在UART通信协议中当信号线上的状态为高时代表“1”当信号线上的状态为低时代表“0”。串行通信是指利用一根传输线逐位依次传输数据也可以用两根信号线组成全双工通信如rs232。特点是通信线路简单使用简单的电缆即可实现通信成本降低适合远距离通信的应用但传输速度慢。1.1.2数据帧结构起始位VOL每次通信开始时发送方发送一个逻辑“0”信号VOL表示传输字符的开始。由于总线空闲时为高电平因此在开始通信时先发送一个与空闲状态明显不同的信号。数据位数据位可以是5、6、7、8、9位等组成一个字符通常是8位。如ASCII码7位、扩展BCD码8位。首先发送最低位最后发送最高位。用低电平表示“0”高电平表示“1”完成数据位的传输.奇偶校验位:奇校验如果数据位中“1”的个数为偶数则奇偶校验位为“1”如果“1”的个数为奇数则奇偶校验位为“0”。偶校验如果数据中“1”的个数为偶数则奇偶校验位为“0”如果数据中“1”的个数为奇数则奇偶校验位为“1”。标记奇偶校验校验位始终为1不常用。奇偶校验奇偶校验位始终为0不常用。停止位:它是字符数据的结束标记。它可以是 1 位、1.5 位或 2 位 VOH。由于数据在传输线上是定时的并且每个设备都有自己的时钟所以在通信时两个设备之间很可能会出现小的不同步。因此停止位不仅表示传输的结束而且还为计算机提供了纠正时钟的机会。停止位越多数据传输越稳定但数据传输速度越慢。1.2.1 常见的串口自定义协议格式多数项目会采用“包头 长度 数据 校验”的协议结构确保数据完整性与可识别性典型格式如下字段长度字节作用说明示例值包头SOF1-2标识数据包开始避免误识别0xAA单字节、0x55AA双字节数据长度1-2表示后续“数据段”的字节数0x04数据段 4 字节数据段可变实际有效数据如传感器值、指令0x00 0x1E 0x00 0x3C温度 25℃、湿度 60%校验位1-2校验数据包是否出错异或校验、CRC16包尾EOF1-2标识数据包结束可选0xBB**为什么需要这样的结构假设传感器每秒发送一次温湿度数据若没有包头 / 包尾接收方可能将“上一帧的残留数据”或“干扰噪声”误判为有效数据。通过固定包头如 0xAA接收方可先过滤非包头数据再按“数据长度”提取完整数据段最后通过校验位验证数据正确性。1.2.2 协议解析的核心逻辑状态机实现解析自定义串口协议的最佳方式是“状态机”通过不同状态处理数据帧的各个字段避免数据粘包或丢包问题。以“0xAA包头1 字节长度 N 字节数据 1 字节异或校验”协议为例。1.3.1 USART与UART的区别UART通用异步收发器仅支持异步通信。这意味着数据传输时发送方和接收方并不共享时钟信号。它们通过设定一致的波特率来保持通信的同步性。USART通用同步/异步收发器支持两种模式异步通信和同步通信.与UART的异步模式相同USART也可以不使用时钟信号传输数据。但它的特别之处在于它还支持同步模式此时发送端和接收端通过共享同一时钟信号来实现数据同步。同步通信能够大幅提高传输速度并减少波特率差异带来的错误。USART异步模式与UART类似数据以帧的形式传输采用相同的帧结构。区别在于USART同步模式下数据传输可以不依赖起始位和停止位而是依赖时钟信号同步这让数据流更加连续并且时序控制更加精确。接上时钟线1.4.1 波特率的计算5191.5.1注意事项只有USART1使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)。Pasted image 20260316015510.png2.1.1 SPI定义:串行外设接口是一种同步、串行、全双工的通信协议专为设备间的短距离数据交换设计。它采用主从架构由一个主设备Master 控制多个从设备Slave数据的采集时机可能是时钟信号的上升沿从低到高或下降沿从高到低。通过四条线实现高效通信。SPI的四条线分别是MOSIMaster Output Slave Input主设备输出、从设备输入的线数据从主设备流向从设备。MISOMaster Input Slave Output主设备输入、从设备输出的线数据从从设备流向主设备。SCLKSerial Clock时钟信号线由主设备生成负责同步数据传输的节奏。CSChip Select或称SSSlave Select片选信号线用于主设备选择要通信的从设备。2.1.2 SPI通信流程SPI通信的典型过程是这样的主设备通过拉低某个从设备的CS线选中它。主设备在SCLK线上生成时钟信号控制数据传输的节奏。数据通过MOSI和MISO线同时双向传输主设备发送数据到从设备从设备同时回传数据到主设备。2.1.3 SPI工作模式SPI存在四种不同的工作模式这些模式主要区别在于时钟极性和时钟相位的不同组合其中使用的最为广泛的是模式0和模式3方式。**CPOL表示高低电平顺序叫做极性CPOL0SPI总线空闲时时钟线SCLK为低电平 CPOL1SPI总线空闲时时钟线SCLK为高电平。CPHA表示第一个/第二个边沿叫做相位。**Pasted image 20260316020131.pngCPHA(Clock Phase)时钟相位选择CPHA0在SCLK第一个跳变沿主机对MISO引脚电平采样主机的数据发送则在第二个跳边沿。CPHA1在SCLK第二个跳变沿主机对MISO引脚电平采样。主机的数据发送则在第一个跳边沿。一个时钟周期会有2个跳变沿。而CPHA相位直接决定SPI总线从哪个跳变沿开始采样数据。至于这个跳变沿究竟是上升沿还是下降沿取决于CPOL的值CPHA只决定第几个跳变沿进行采样。工作模式汇总CPHA0、CPOL0SCK默认为低电平,在第一边沿上升沿进行读取 在第二边沿下降沿进行发送CPHA0、CPOL1SCK默认为低电平,在第一边沿上升沿进行发送 在第二边沿下降沿进行读取CPHA1、CPOL0SCK默认为高电平, 在第一边沿下降沿进行读取 在第二边沿上升沿进行发送CPHA1、CPOL1SCK默认为高电平,在第一边沿下降沿进行发送 在第二边沿上升沿进行读取I2C定义多主机、两线制、低速串行通信总线串行数据线SDA和串行时钟线SCL进行双向传输同步半双工模式。I2C 协议规定总线上的电容不可以超过 400pF。管脚都是有输入电容的PCB上也会有寄生电容所以会有一个限制。实际设计中经验值大概是不超过 8 个器件。优点两线制总线I2C仅使用两条线——串行数据线SDA和串行时钟线SCL进行通信有效降低了连接复杂性。多主多从设备支持I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。可变的时钟速率I2C总线支持不同的速率模式如标准模式100kbps、快速模式400kbps和高速模式3.4Mbps。同步通信I2C是一种同步通信协议数据传输由时钟信号SCL来控制。简单的连接I2C通信对硬件的要求比较低很容易在微控制器和外围设备间实现连接。地址分配每个I2C设备都通过一个7位或10位的地址来识别这使得总线上可以连接多个设备。阻塞传输I2C支持阻塞传输机制即主设备可以在传输过程中控制总线防止其他设备发送数据。应用广泛由于其简单和灵活性I2C被广泛应用于各种电子产品中如传感器、LCD显示器、EEPROM等。总线仲裁和冲突检测在多主模式下I2C能够处理多个主设备同时尝试控制总线的情况。低功耗I2C总线的设计使其成为低功耗的通信方式适用于电池供电的设备。最大主设备数无限制最大从机数理论上是127硬件电路Pasted image 20260316020733.png为何要配置上拉电阻开漏输出GPIO 一般为开漏模式如果说 没有上拉电阻不是开漏输出而是推挽输出的话因为我们是多主多从协议那么被控端和主机端的sda协议都是需要从输入与输出反复切换的如果时间协调不好一个输入另一个输出就会导致线路短路。所以说禁止所有设备输出强上拉的高电平通过电阻来实现弱上拉。开漏因为上拉电阻的存在每次高低电平变换都会消耗能量因此功耗高。时序基本单元Pasted image 20260316021422.png这些都是主机产生的数据帧结构Pasted image 20260316122649.pngPasted image 20260316021713.png器件地址在设备手册中有体现子地址一般是指设备内部的一个指针负责读写输出据在器件地址的八位中前七位为器件地址最后一位为读写操作。S为起始位P为结束位A表示有应答逻辑0在第一组的第八位中有一个标志位负责知道是读还是写读写标志位如果为1即为读操作为0为写操作。子地址是指针功能需要用的确定读写哪一个寄存器如果是第四个寄存器也就是填写二进制的4然后从设备再次应答。读数据的话还需要重发一次起始位然后再用读操作此时才是该子地址的数据指针设置过一次就会被保存只要不断电不更改就会一直在该位置i2c的机制总线仲裁背景在多主模式下当两个主设备同时尝试控制总线时I2C协议包含仲裁机制以决定哪个设备获得控制权。I2C总线上的仲裁分两部分SCL线的同步和SDA线的仲裁。线与当总线上只要有一个设备输出低电平整条总线便处于低电平状态这时候总线被称为占用状态。开漏输出设备内部的驱动电路只能将线路拉低输出0或者释放线路高阻态由电阻拉高为1。定义多个主设备Master同时尝试发起通信。过程仲裁是按位进行的从起始信号开始一直到数据结束。发送并监听每个主设备在发送每一位数据时都会同时监听SDA总线上的实际电平。比较如果发送值 监听值继续发送下一位。如果发送值(1)说明有另一个主设备正在拉低总线发送0。根据“线与”原则0优先。判决发送1却读到0的设备立即判定为仲裁失败Arbitration Lost。动作立刻停止发送释放SDA和SCL线转为从设备模式监听总线等待下一次机会。它之前发送的数据因为被覆盖通常需要上层软件重发。发送0的设备完全不知道发生了竞争继续正常发送。它赢得仲裁。时钟周期Master A 发送Master B 发送总线实际电平 (线与)结果分析Bit 11(释放)1(释放)1(上拉)一致继续Bit 20(拉低)0(拉低)0一致继续Bit 31(释放)0(拉低)0A发现不一致(发1读0) -A失败退出B继续(它发0读0认为正常)优先级隐含在数据中数据中0越多尤其是高位越早出现0优先级越高。例如地址0x50(0101...) 会比0x60(0110...) 更容易赢因为在第3位0战胜了1。谁先出现1谁就退出不竞争同步机制定义多主模式下不同主设备的时钟频率可能不同I2C引入了时钟同步机制主要通过时钟拉伸实现。低速决定高速当多个主设备同时工作时总线的SCL时钟由所有参与设备共同决定。规则SCL线也是“线与”逻辑。只要有一个设备将SCL拉低整个总线的时钟就被拉低。过程所有主设备都试图产生自己的时钟脉冲。当某个主设备完成低电平周期释放SCL想让SCL变高时如果其他设备还在低电平周期拉着SCL不放那么SCL保持低电平。那个释放了SCL的设备会检测到SCL仍然是低的于是它进入等待状态Wait State。直到所有设备都完成低电平周期并释放SCLSCL才会被上拉电阻拉高。同理高电平时间由最短的那个设备决定一旦有人拉低高电平结束。简单的说 就是速度快的在等速度慢的整个系统的节奏由速度最慢的人决定时钟拉伸1.从设备或慢速主设备通过“赖着不松手”强行拉低 SCL强制让快的一方停下来等它。CAN通信定义CAN 是一种多主方式的串行通讯总线基本设计规范要求有高的位速率高抗电磁干扰性而且能够检测出产生的任何错误。当信号传输距离达到10Km 时CAN 仍可提供高达50Kbit/s 的数据传输速率。原理CAN 通讯并不是以时钟信号来进行同步的它是一种异步通讯只具有 CAN_High 和 CAN_Low 两条信号线共同构成一组差分信号线以差分信号的形式进行通讯。一、CAN总线的硬件电路1.1 闭环总线网络高速CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”它的总线最大长度为 40m通信速度最高为 1Mbps总线的两端各要求有一个“120 欧”的电阻。这个电阻的作用是 防止回波反射与平衡两条线的电压默认1Pasted image 20260316131257.png1.1 开环总线网络低速图中的是遵循 ISO11519-2 标准的低速、远距离“开环网络”它的最大传输距离为 1km最高通讯速率为 125kbps两根总线是独立的、不形成闭环要求每根总线上各串联有一个“2.2千欧”的电阻。这个电阻的作用是 防止回波反射Pasted image 20260316131327.png1.2.3 通讯节点从 CAN 通讯网络图可了解到CAN 总线上可以挂载多个通讯节点节点之间的信号经过总线传输实现节点间通讯。由于 CAN 通讯协议不对节点进行地址编码而是对数据内容进行编码的所以网络中的节点个数理论上不受限制只要总线的负载足够即可可以通过中继器增强负载。CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成控制器与收发器之间通过CAN_Tx 及CAN_Rx信号线相连收发器与 CAN 总线之间使用CAN_High 及 CAN_Low信号线相连。其中CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号而 CAN_High 及 CAN_Low 是一对差分信号线使用比较特别的差分信号。1.2.4差分信号差分信号又称差模信号与传统使用单根信号线电压表示逻辑的方式有区别使用差分信号传输时需要两根信号线这两个信号线的振幅相等相位相反通过两根信号线的电压差值来表示逻辑 0 和逻辑 1。见图它使用了 V 与 V-信号的差值表达出了图下方的信号。Pasted image 20260316132052.png相对于单信号线传输的方式使用差分信号传输具有如下优点1.当外界存在噪声干扰时几乎会同时耦合到两条信号线上而接收端只关心两个信号的差值所以外界的共模噪声可以被完全抵消。2.能有效抑制它对外部的电磁干扰同样的道理由于两根信号的极性相反他们对外辐射的电磁场可以相互抵消耦合的越紧密泄放到外界的电磁能量越少。举一个例子假设一根是10V一根是-10V单跟都会对外部造成电磁干扰但是CAN可以把线拧在一起跟编麻花一样可以互相抵消电子干扰3.时序定位精确由于差分信号的开关变化是位于两个信号的交点而不像普通单端信号依靠高低两个阈值电压判断因而受工艺温度的影响小能降低时序上的误差同时也更适合于低幅度信号的电路CAN总线采用差分信号高速CAN规定电压差为0V为逻辑1 电压差为2V为逻辑0低速CAN规定电压差为-1.5V时为逻辑13V为逻辑0Pasted image 20260316134111.png二、CAN总线的帧结构691Pasted image 20260316134435.png分为标准格式与扩展格式主要增加id位数。D为显性电平0D/R为1和0都可以R为隐性电平1白黑各一半接收方必须发送显性0接收方必须要发隐性1标准过程空闲状态为隐性电平1---SOF帧起始位0----报文ID11位——RTR(远程请求标志位)-----IDE(ID扩展标志位)-----R0保留位--------DLC(数据段长度)——DATA(数据段)——CRC校验位---------CRC界定符发送隐性1释放总线------ACK应答设计-------ACK界定符接收方释放总线------EOF(停止位)IDE(ID扩展标志位标准格式 为0、扩展格式为1扩展格式:SRR给隐性电平1 RTR后移,IDE置1仲裁段报文ID区分优先级、存不同的ID远程请求标志位区分数据帧0与遥控帧1用报文ID区分优先级加入RTR段——相同id的数据帧和遥控帧数据大于遥控。类似于I2C英文全名遥控帧无数据段、RTR为隐形电平1其他与数据段相同。既然可以互相通信那么总有时钟慢的这样会拖垮整个总线的速度那么我就让慢的平时不广播接收方需要的时候给他发送一个遥控帧然后遥控数据方发送数据。但是这种情况只适用于使用频率低的设备因为一来一回也浪费总线资源。位填充规则发送方每发送五个相同电平自动追加一个相反电平的填充为接收方检测到填充位时会自动移除恢复原始数据作用增加波形的定时信息利于接收方执行再同步防止波形长时间无变化导致接收方不能精确掌握数据采样时机。将错误帧与过载帧区分开保持总线的活跃状态防止误认空闲64个隐性1就可以认为空闲三、接收方数据采样通过约定波特率确定数据位的时长采样点一般建议在中心位偏后并不会对齐常见问题四、位时序为了灵活调整采样点的位置使他对齐can总线把数据为的时长分为同步段(SSS)、传播时间段(PTS)、相位缓冲段(PBS1)和相位缓冲段2PBS2).每个段又有若干个Tq最小时间单位组成。这里就类似于NTN的帧结构以下是分配方法如果跳变沿正好出现在SS段那么说明同步正确若出现在其他段则需要调整同步PTS用来等待物理上的延时确定采样点的位置在pbs1与pbs2中间474五、同步一硬同步每个设备都有位时序计时周期、发送方率先发出报文接收方收到SOF的下降沿时接收方会同步自己的位时许计时周期拨到SS段与发送方的位时序计时周期保持同步Pasted image 20260316144916.png697发送方发送数据此时接收方发现下降沿不在ss段此时强制设置此时为SS段与发送方同步经过硬同步此时帧结构秒表全部对齐那么正常情况下不会出现问题但是设备间有差异会出现偏移那么我们引出再同步二再同步利用位填充机制定义若发送方或接收方时钟有偏差随着误差积累此时又会偏移SS段此时接收方根据再同步补偿宽度指(sw)通过控制PBS1和PBS2的宽度以实现再同步再同步可以发生在第一个下降沿之后的每个数据段跳变边沿接收方出现跳变沿在ss之后一般在PBS1与PBS2插入SJW 一般为1~4Tq接收方出现跳变沿在ss之前 缩短PBS1与PBS2的长度六、波特率的计算七、总线的资源分配规则先来后到原则非破坏性仲裁规律不允许抢占当前已经有设备操作总线发送则其他设备不能同时发送数据/遥控帧 可以破坏任何设备检测到连续11个隐性电平时才会认为空闲才可以发送一旦有设备在发送总线会活跃自然其他社会不会破坏如果其他设备有发送需求必须等空闲才可以执行发送需求若同时发送CAN总线会通过ID号来进行仲裁ID号小优先级高。线与特性与回读机制:只要有一个设备输出0那么就是0只有所有设备输出1那么就是1.发送方发送数据之后 自己也会接收一遍确认自己是不是真的发送出去了八、错误处理CRC错误位错误------回读机制填充错误----位填充不允许五个以上的连续相同电平格式错误----固定的帧出现错误电平ACK错误-----发送方发出一个帧没人应答那么就错误九、错误状态上述错误接收方和发送方的所有设备都在检测该CAN总线的波形那么如果一旦出现某一个设备发生故障一直认为当前线路数据错误破坏数据将会导致全面瘫痪因此引出错误状态。信誉积分机制1.主动错误状态的设备正常参与通信并在检测到错误时发出2.主动错误帧被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧3.总线关闭状态的设备不能参与通信4.每个设备内部管理一个TEC发送错误计数器和REC接受错误计数器根据TEC和REC的值确定自己的状态用这两个数据来反映相对的报错频
嵌入式通信协议(学习)
1.1.1UART定义串行、异步、全双工通信协议 通用异步接收发送器没有共享时钟线。工作原理逐位传输传输数据的每个二进制位。在UART通信协议中当信号线上的状态为高时代表“1”当信号线上的状态为低时代表“0”。串行通信是指利用一根传输线逐位依次传输数据也可以用两根信号线组成全双工通信如rs232。特点是通信线路简单使用简单的电缆即可实现通信成本降低适合远距离通信的应用但传输速度慢。1.1.2数据帧结构起始位VOL每次通信开始时发送方发送一个逻辑“0”信号VOL表示传输字符的开始。由于总线空闲时为高电平因此在开始通信时先发送一个与空闲状态明显不同的信号。数据位数据位可以是5、6、7、8、9位等组成一个字符通常是8位。如ASCII码7位、扩展BCD码8位。首先发送最低位最后发送最高位。用低电平表示“0”高电平表示“1”完成数据位的传输.奇偶校验位:奇校验如果数据位中“1”的个数为偶数则奇偶校验位为“1”如果“1”的个数为奇数则奇偶校验位为“0”。偶校验如果数据中“1”的个数为偶数则奇偶校验位为“0”如果数据中“1”的个数为奇数则奇偶校验位为“1”。标记奇偶校验校验位始终为1不常用。奇偶校验奇偶校验位始终为0不常用。停止位:它是字符数据的结束标记。它可以是 1 位、1.5 位或 2 位 VOH。由于数据在传输线上是定时的并且每个设备都有自己的时钟所以在通信时两个设备之间很可能会出现小的不同步。因此停止位不仅表示传输的结束而且还为计算机提供了纠正时钟的机会。停止位越多数据传输越稳定但数据传输速度越慢。1.2.1 常见的串口自定义协议格式多数项目会采用“包头 长度 数据 校验”的协议结构确保数据完整性与可识别性典型格式如下字段长度字节作用说明示例值包头SOF1-2标识数据包开始避免误识别0xAA单字节、0x55AA双字节数据长度1-2表示后续“数据段”的字节数0x04数据段 4 字节数据段可变实际有效数据如传感器值、指令0x00 0x1E 0x00 0x3C温度 25℃、湿度 60%校验位1-2校验数据包是否出错异或校验、CRC16包尾EOF1-2标识数据包结束可选0xBB**为什么需要这样的结构假设传感器每秒发送一次温湿度数据若没有包头 / 包尾接收方可能将“上一帧的残留数据”或“干扰噪声”误判为有效数据。通过固定包头如 0xAA接收方可先过滤非包头数据再按“数据长度”提取完整数据段最后通过校验位验证数据正确性。1.2.2 协议解析的核心逻辑状态机实现解析自定义串口协议的最佳方式是“状态机”通过不同状态处理数据帧的各个字段避免数据粘包或丢包问题。以“0xAA包头1 字节长度 N 字节数据 1 字节异或校验”协议为例。1.3.1 USART与UART的区别UART通用异步收发器仅支持异步通信。这意味着数据传输时发送方和接收方并不共享时钟信号。它们通过设定一致的波特率来保持通信的同步性。USART通用同步/异步收发器支持两种模式异步通信和同步通信.与UART的异步模式相同USART也可以不使用时钟信号传输数据。但它的特别之处在于它还支持同步模式此时发送端和接收端通过共享同一时钟信号来实现数据同步。同步通信能够大幅提高传输速度并减少波特率差异带来的错误。USART异步模式与UART类似数据以帧的形式传输采用相同的帧结构。区别在于USART同步模式下数据传输可以不依赖起始位和停止位而是依赖时钟信号同步这让数据流更加连续并且时序控制更加精确。接上时钟线1.4.1 波特率的计算5191.5.1注意事项只有USART1使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)。Pasted image 20260316015510.png2.1.1 SPI定义:串行外设接口是一种同步、串行、全双工的通信协议专为设备间的短距离数据交换设计。它采用主从架构由一个主设备Master 控制多个从设备Slave数据的采集时机可能是时钟信号的上升沿从低到高或下降沿从高到低。通过四条线实现高效通信。SPI的四条线分别是MOSIMaster Output Slave Input主设备输出、从设备输入的线数据从主设备流向从设备。MISOMaster Input Slave Output主设备输入、从设备输出的线数据从从设备流向主设备。SCLKSerial Clock时钟信号线由主设备生成负责同步数据传输的节奏。CSChip Select或称SSSlave Select片选信号线用于主设备选择要通信的从设备。2.1.2 SPI通信流程SPI通信的典型过程是这样的主设备通过拉低某个从设备的CS线选中它。主设备在SCLK线上生成时钟信号控制数据传输的节奏。数据通过MOSI和MISO线同时双向传输主设备发送数据到从设备从设备同时回传数据到主设备。2.1.3 SPI工作模式SPI存在四种不同的工作模式这些模式主要区别在于时钟极性和时钟相位的不同组合其中使用的最为广泛的是模式0和模式3方式。**CPOL表示高低电平顺序叫做极性CPOL0SPI总线空闲时时钟线SCLK为低电平 CPOL1SPI总线空闲时时钟线SCLK为高电平。CPHA表示第一个/第二个边沿叫做相位。**Pasted image 20260316020131.pngCPHA(Clock Phase)时钟相位选择CPHA0在SCLK第一个跳变沿主机对MISO引脚电平采样主机的数据发送则在第二个跳边沿。CPHA1在SCLK第二个跳变沿主机对MISO引脚电平采样。主机的数据发送则在第一个跳边沿。一个时钟周期会有2个跳变沿。而CPHA相位直接决定SPI总线从哪个跳变沿开始采样数据。至于这个跳变沿究竟是上升沿还是下降沿取决于CPOL的值CPHA只决定第几个跳变沿进行采样。工作模式汇总CPHA0、CPOL0SCK默认为低电平,在第一边沿上升沿进行读取 在第二边沿下降沿进行发送CPHA0、CPOL1SCK默认为低电平,在第一边沿上升沿进行发送 在第二边沿下降沿进行读取CPHA1、CPOL0SCK默认为高电平, 在第一边沿下降沿进行读取 在第二边沿上升沿进行发送CPHA1、CPOL1SCK默认为高电平,在第一边沿下降沿进行发送 在第二边沿上升沿进行读取I2C定义多主机、两线制、低速串行通信总线串行数据线SDA和串行时钟线SCL进行双向传输同步半双工模式。I2C 协议规定总线上的电容不可以超过 400pF。管脚都是有输入电容的PCB上也会有寄生电容所以会有一个限制。实际设计中经验值大概是不超过 8 个器件。优点两线制总线I2C仅使用两条线——串行数据线SDA和串行时钟线SCL进行通信有效降低了连接复杂性。多主多从设备支持I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。可变的时钟速率I2C总线支持不同的速率模式如标准模式100kbps、快速模式400kbps和高速模式3.4Mbps。同步通信I2C是一种同步通信协议数据传输由时钟信号SCL来控制。简单的连接I2C通信对硬件的要求比较低很容易在微控制器和外围设备间实现连接。地址分配每个I2C设备都通过一个7位或10位的地址来识别这使得总线上可以连接多个设备。阻塞传输I2C支持阻塞传输机制即主设备可以在传输过程中控制总线防止其他设备发送数据。应用广泛由于其简单和灵活性I2C被广泛应用于各种电子产品中如传感器、LCD显示器、EEPROM等。总线仲裁和冲突检测在多主模式下I2C能够处理多个主设备同时尝试控制总线的情况。低功耗I2C总线的设计使其成为低功耗的通信方式适用于电池供电的设备。最大主设备数无限制最大从机数理论上是127硬件电路Pasted image 20260316020733.png为何要配置上拉电阻开漏输出GPIO 一般为开漏模式如果说 没有上拉电阻不是开漏输出而是推挽输出的话因为我们是多主多从协议那么被控端和主机端的sda协议都是需要从输入与输出反复切换的如果时间协调不好一个输入另一个输出就会导致线路短路。所以说禁止所有设备输出强上拉的高电平通过电阻来实现弱上拉。开漏因为上拉电阻的存在每次高低电平变换都会消耗能量因此功耗高。时序基本单元Pasted image 20260316021422.png这些都是主机产生的数据帧结构Pasted image 20260316122649.pngPasted image 20260316021713.png器件地址在设备手册中有体现子地址一般是指设备内部的一个指针负责读写输出据在器件地址的八位中前七位为器件地址最后一位为读写操作。S为起始位P为结束位A表示有应答逻辑0在第一组的第八位中有一个标志位负责知道是读还是写读写标志位如果为1即为读操作为0为写操作。子地址是指针功能需要用的确定读写哪一个寄存器如果是第四个寄存器也就是填写二进制的4然后从设备再次应答。读数据的话还需要重发一次起始位然后再用读操作此时才是该子地址的数据指针设置过一次就会被保存只要不断电不更改就会一直在该位置i2c的机制总线仲裁背景在多主模式下当两个主设备同时尝试控制总线时I2C协议包含仲裁机制以决定哪个设备获得控制权。I2C总线上的仲裁分两部分SCL线的同步和SDA线的仲裁。线与当总线上只要有一个设备输出低电平整条总线便处于低电平状态这时候总线被称为占用状态。开漏输出设备内部的驱动电路只能将线路拉低输出0或者释放线路高阻态由电阻拉高为1。定义多个主设备Master同时尝试发起通信。过程仲裁是按位进行的从起始信号开始一直到数据结束。发送并监听每个主设备在发送每一位数据时都会同时监听SDA总线上的实际电平。比较如果发送值 监听值继续发送下一位。如果发送值(1)说明有另一个主设备正在拉低总线发送0。根据“线与”原则0优先。判决发送1却读到0的设备立即判定为仲裁失败Arbitration Lost。动作立刻停止发送释放SDA和SCL线转为从设备模式监听总线等待下一次机会。它之前发送的数据因为被覆盖通常需要上层软件重发。发送0的设备完全不知道发生了竞争继续正常发送。它赢得仲裁。时钟周期Master A 发送Master B 发送总线实际电平 (线与)结果分析Bit 11(释放)1(释放)1(上拉)一致继续Bit 20(拉低)0(拉低)0一致继续Bit 31(释放)0(拉低)0A发现不一致(发1读0) -A失败退出B继续(它发0读0认为正常)优先级隐含在数据中数据中0越多尤其是高位越早出现0优先级越高。例如地址0x50(0101...) 会比0x60(0110...) 更容易赢因为在第3位0战胜了1。谁先出现1谁就退出不竞争同步机制定义多主模式下不同主设备的时钟频率可能不同I2C引入了时钟同步机制主要通过时钟拉伸实现。低速决定高速当多个主设备同时工作时总线的SCL时钟由所有参与设备共同决定。规则SCL线也是“线与”逻辑。只要有一个设备将SCL拉低整个总线的时钟就被拉低。过程所有主设备都试图产生自己的时钟脉冲。当某个主设备完成低电平周期释放SCL想让SCL变高时如果其他设备还在低电平周期拉着SCL不放那么SCL保持低电平。那个释放了SCL的设备会检测到SCL仍然是低的于是它进入等待状态Wait State。直到所有设备都完成低电平周期并释放SCLSCL才会被上拉电阻拉高。同理高电平时间由最短的那个设备决定一旦有人拉低高电平结束。简单的说 就是速度快的在等速度慢的整个系统的节奏由速度最慢的人决定时钟拉伸1.从设备或慢速主设备通过“赖着不松手”强行拉低 SCL强制让快的一方停下来等它。CAN通信定义CAN 是一种多主方式的串行通讯总线基本设计规范要求有高的位速率高抗电磁干扰性而且能够检测出产生的任何错误。当信号传输距离达到10Km 时CAN 仍可提供高达50Kbit/s 的数据传输速率。原理CAN 通讯并不是以时钟信号来进行同步的它是一种异步通讯只具有 CAN_High 和 CAN_Low 两条信号线共同构成一组差分信号线以差分信号的形式进行通讯。一、CAN总线的硬件电路1.1 闭环总线网络高速CAN 通讯网络是一种遵循 ISO11898 标准的高速、短距离“闭环网络”它的总线最大长度为 40m通信速度最高为 1Mbps总线的两端各要求有一个“120 欧”的电阻。这个电阻的作用是 防止回波反射与平衡两条线的电压默认1Pasted image 20260316131257.png1.1 开环总线网络低速图中的是遵循 ISO11519-2 标准的低速、远距离“开环网络”它的最大传输距离为 1km最高通讯速率为 125kbps两根总线是独立的、不形成闭环要求每根总线上各串联有一个“2.2千欧”的电阻。这个电阻的作用是 防止回波反射Pasted image 20260316131327.png1.2.3 通讯节点从 CAN 通讯网络图可了解到CAN 总线上可以挂载多个通讯节点节点之间的信号经过总线传输实现节点间通讯。由于 CAN 通讯协议不对节点进行地址编码而是对数据内容进行编码的所以网络中的节点个数理论上不受限制只要总线的负载足够即可可以通过中继器增强负载。CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成控制器与收发器之间通过CAN_Tx 及CAN_Rx信号线相连收发器与 CAN 总线之间使用CAN_High 及 CAN_Low信号线相连。其中CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号而 CAN_High 及 CAN_Low 是一对差分信号线使用比较特别的差分信号。1.2.4差分信号差分信号又称差模信号与传统使用单根信号线电压表示逻辑的方式有区别使用差分信号传输时需要两根信号线这两个信号线的振幅相等相位相反通过两根信号线的电压差值来表示逻辑 0 和逻辑 1。见图它使用了 V 与 V-信号的差值表达出了图下方的信号。Pasted image 20260316132052.png相对于单信号线传输的方式使用差分信号传输具有如下优点1.当外界存在噪声干扰时几乎会同时耦合到两条信号线上而接收端只关心两个信号的差值所以外界的共模噪声可以被完全抵消。2.能有效抑制它对外部的电磁干扰同样的道理由于两根信号的极性相反他们对外辐射的电磁场可以相互抵消耦合的越紧密泄放到外界的电磁能量越少。举一个例子假设一根是10V一根是-10V单跟都会对外部造成电磁干扰但是CAN可以把线拧在一起跟编麻花一样可以互相抵消电子干扰3.时序定位精确由于差分信号的开关变化是位于两个信号的交点而不像普通单端信号依靠高低两个阈值电压判断因而受工艺温度的影响小能降低时序上的误差同时也更适合于低幅度信号的电路CAN总线采用差分信号高速CAN规定电压差为0V为逻辑1 电压差为2V为逻辑0低速CAN规定电压差为-1.5V时为逻辑13V为逻辑0Pasted image 20260316134111.png二、CAN总线的帧结构691Pasted image 20260316134435.png分为标准格式与扩展格式主要增加id位数。D为显性电平0D/R为1和0都可以R为隐性电平1白黑各一半接收方必须发送显性0接收方必须要发隐性1标准过程空闲状态为隐性电平1---SOF帧起始位0----报文ID11位——RTR(远程请求标志位)-----IDE(ID扩展标志位)-----R0保留位--------DLC(数据段长度)——DATA(数据段)——CRC校验位---------CRC界定符发送隐性1释放总线------ACK应答设计-------ACK界定符接收方释放总线------EOF(停止位)IDE(ID扩展标志位标准格式 为0、扩展格式为1扩展格式:SRR给隐性电平1 RTR后移,IDE置1仲裁段报文ID区分优先级、存不同的ID远程请求标志位区分数据帧0与遥控帧1用报文ID区分优先级加入RTR段——相同id的数据帧和遥控帧数据大于遥控。类似于I2C英文全名遥控帧无数据段、RTR为隐形电平1其他与数据段相同。既然可以互相通信那么总有时钟慢的这样会拖垮整个总线的速度那么我就让慢的平时不广播接收方需要的时候给他发送一个遥控帧然后遥控数据方发送数据。但是这种情况只适用于使用频率低的设备因为一来一回也浪费总线资源。位填充规则发送方每发送五个相同电平自动追加一个相反电平的填充为接收方检测到填充位时会自动移除恢复原始数据作用增加波形的定时信息利于接收方执行再同步防止波形长时间无变化导致接收方不能精确掌握数据采样时机。将错误帧与过载帧区分开保持总线的活跃状态防止误认空闲64个隐性1就可以认为空闲三、接收方数据采样通过约定波特率确定数据位的时长采样点一般建议在中心位偏后并不会对齐常见问题四、位时序为了灵活调整采样点的位置使他对齐can总线把数据为的时长分为同步段(SSS)、传播时间段(PTS)、相位缓冲段(PBS1)和相位缓冲段2PBS2).每个段又有若干个Tq最小时间单位组成。这里就类似于NTN的帧结构以下是分配方法如果跳变沿正好出现在SS段那么说明同步正确若出现在其他段则需要调整同步PTS用来等待物理上的延时确定采样点的位置在pbs1与pbs2中间474五、同步一硬同步每个设备都有位时序计时周期、发送方率先发出报文接收方收到SOF的下降沿时接收方会同步自己的位时许计时周期拨到SS段与发送方的位时序计时周期保持同步Pasted image 20260316144916.png697发送方发送数据此时接收方发现下降沿不在ss段此时强制设置此时为SS段与发送方同步经过硬同步此时帧结构秒表全部对齐那么正常情况下不会出现问题但是设备间有差异会出现偏移那么我们引出再同步二再同步利用位填充机制定义若发送方或接收方时钟有偏差随着误差积累此时又会偏移SS段此时接收方根据再同步补偿宽度指(sw)通过控制PBS1和PBS2的宽度以实现再同步再同步可以发生在第一个下降沿之后的每个数据段跳变边沿接收方出现跳变沿在ss之后一般在PBS1与PBS2插入SJW 一般为1~4Tq接收方出现跳变沿在ss之前 缩短PBS1与PBS2的长度六、波特率的计算七、总线的资源分配规则先来后到原则非破坏性仲裁规律不允许抢占当前已经有设备操作总线发送则其他设备不能同时发送数据/遥控帧 可以破坏任何设备检测到连续11个隐性电平时才会认为空闲才可以发送一旦有设备在发送总线会活跃自然其他社会不会破坏如果其他设备有发送需求必须等空闲才可以执行发送需求若同时发送CAN总线会通过ID号来进行仲裁ID号小优先级高。线与特性与回读机制:只要有一个设备输出0那么就是0只有所有设备输出1那么就是1.发送方发送数据之后 自己也会接收一遍确认自己是不是真的发送出去了八、错误处理CRC错误位错误------回读机制填充错误----位填充不允许五个以上的连续相同电平格式错误----固定的帧出现错误电平ACK错误-----发送方发出一个帧没人应答那么就错误九、错误状态上述错误接收方和发送方的所有设备都在检测该CAN总线的波形那么如果一旦出现某一个设备发生故障一直认为当前线路数据错误破坏数据将会导致全面瘫痪因此引出错误状态。信誉积分机制1.主动错误状态的设备正常参与通信并在检测到错误时发出2.主动错误帧被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧3.总线关闭状态的设备不能参与通信4.每个设备内部管理一个TEC发送错误计数器和REC接受错误计数器根据TEC和REC的值确定自己的状态用这两个数据来反映相对的报错频