<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>通讯协议 on Rancho&#39;s Notes</title>
    <link>https://fan-pengfei.top/tags/%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/</link>
    <description>Recent content in 通讯协议 on Rancho&#39;s Notes</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 09 May 2022 13:38:00 +0000</lastBuildDate>
    <atom:link href="https://fan-pengfei.top/tags/%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>常用的通信协议</title>
      <link>https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/</link>
      <pubDate>Mon, 09 May 2022 13:38:00 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;常用通讯协议(SPI、IIC、UART)；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一usart和uart&#34;&gt;一、USART和UART:&lt;/h2&gt;
&lt;p&gt;USART:通用同步异步收发器，USART是一个串行通信设备，可以灵活地与外部设备进行全双工数据交换。&lt;/p&gt;
&lt;p&gt;UART: 通用异步收发器，异步串行通信口(UART)就是我们在嵌入式中常说的串口，它还是一种通用的数据通信议。&lt;/p&gt;
&lt;p&gt;异步通讯时二者无区别，同步通讯时USART可以提供主动时钟。&lt;/p&gt;
&lt;p&gt;均为全双工通信。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;起始位：先发出一个逻辑”0”的信号，表示传输数据的开始。
数据位：传输N bits。
校验位(可选)：数据位加上这一位后，使得“1”的位数应为偶数(偶校验)或奇数(奇校验)，以此来校验数据传送的正确性。
如传输“A”(01000001)为例,”A”字符的8个bit位中有两个1。当为奇数校验时该位为1；当为偶数校验时该位为0。
停止位：它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。
空闲位：没有数据传输时线路上的电平状态。为逻辑1。
传输方向：即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。比如传输“A”如果是MSB那么就是01000001，如果是LSB那么就是10000010
帧间隔：即传送数据的帧与帧之间的间隔大小，可以以位为计量也可以用时间(知道波特率那么位数和时间可以换算)。比如传送”A”完后，这为一帧数据，再传”B”，那么A与B之间的间隔即为帧间隔。
波特率定义：有效数据信号调制载波的速率，每秒传输1或0的个数；
例如：串口传输速率为9600bps，每秒可传输多少字节？
起始位：1    数据位：8
停止位：1    校验位：0
传输1字节数据，需要传输10bit，因此：
9600 ÷ 10 = &lt;strong&gt;960Byte&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;二iic通讯协议&#34;&gt;二、IIC通讯协议：&lt;/h2&gt;
&lt;p&gt;IIC协议为半双工协议。&lt;/p&gt;
&lt;p&gt;全双工指在发送数据的同时也能够接收数据；&lt;/p&gt;
&lt;p&gt;半双工就是指一个时间段内只有一个动作发生；&lt;/p&gt;
&lt;p&gt;数据有效传输在scl信号的高电平期间，sda数据线保持稳定，在scl为低电平时允许sda数据线变化。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;起始条件在scl为高电平期间，sda出现下降沿，则为起始信号。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/img-2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;结束条件在scl为高电平期间，sda出现上升沿，则为结束信号。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/img-3.png&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：注意起始和终止信号都是由主机发出的，总线在起始条件之后，视为忙状态，在停止条件之后被视为空闲状态。
应答（ACK，Acknowledgement）。即确认字符，在数据通信中，接收站发给发送站的一种传输类控制字符。主机每向从机发送完一个字节的数据，主机总是需要等待从机给出一个应答信号，来确认从机是否成功接收到了数据，从机应答主机所需要的时钟也是由主机提供的，应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期，低电平0表示应答，1表示非应答。，需要应答时，数据发出方将SDA总线设置为3态输入，由于IIC总线上有上拉电阻，因此此时总线默认高电平，若数据接收方正确接收到数据，则数据接收方将SDA总线拉低，以示正确应答。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;IIC传输时时从MSB开始传输到LSB结束。MSB是Most Significant Bit的缩写，最高有效位。在二进制数中，MSB是最高加权位。与十进制数字中最左边的一位类似。通常，MSB位于二进制数的最左侧，LSB位于二进制数的最右侧。LSB，英文 least significant bit，中文义最低有效位。&lt;/p&gt;
&lt;p&gt;写时序：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/img-4.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;​    ID_Address, REG_Address, W_REG_Data&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;产生start位；
传送器件地址ID_Address，器件地址的最后一位为数据的传输方向位，R/W，低电平0表示主机往从机写数据（W），1表示主机从从机读数据（R）。ACK应答，应答是从机发送给主机的应答，这里不用管；
传送写入器件寄存器地址，即数据要写入的位置。同样ACK应答不用管；
传送要写入的数据。ACK应答不用管；
产生stop信号；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;读时序：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/%E5%B8%B8%E7%94%A8%E7%9A%84%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE/img-5.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;​    {ID_Address + REG_Address} + {ID_Address + R_REG_Data}&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;产生start信号
传送器件地址（写ID_Address），ACK。
传送字地址（写REG_Address），ACK。
再次产生start信号
再传送一次器件地址，ACK。
读取一个字节的数据，读数据最后结束前无应答ACK信号。
产生stop信号。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CAN通讯解析</title>
      <link>https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/</link>
      <pubDate>Sun, 08 May 2022 02:52:45 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;CAN通讯解析；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;控制器局域网&lt;/strong&gt; (&lt;strong&gt;Controller Area Network&lt;/strong&gt;，简称&lt;strong&gt;CAN&lt;/strong&gt;或者&lt;strong&gt;CAN bus&lt;/strong&gt;) 是一种功能丰富的车用总线标准。被设计用于在不需要主机（Host）的情况下，允许网络上的单片机和仪器相互通信。 它基于[消息传递协议，设计之初在车辆上采用复用通信线缆，以降低铜线使用量，后来也被其他行业所使用。&lt;/p&gt;
&lt;p&gt;CAN创建在基于信息导向传输协定的广播机制（Broadcast Communication Mechanism）上。其根据信息的内容，利用信息标志符（Message Identifier，每个标志符在整个网络中独一无二）来定义内容和消息的优先顺序进行传递，而并非指派特定站点地址（Station Address）的方式。&lt;/p&gt;
&lt;p&gt;因此，CAN拥有了良好的弹性调整能力，可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外，消息的传递不基于特殊种类的节点，增加了升级网络的便利性。&lt;/p&gt;
&lt;h2 id=&#34;架构&#34;&gt;架构：&lt;/h2&gt;
&lt;p&gt;CAN是一个用于连接电子控制单元（ECU）的多主机串行总线标准。电子控制单元有时也被称作节点。CAN网络上需要至少两个节点才可进行通信。节点的复杂程度可以只是简单的输入输出设备，也可以是包含有CAN交互器并搭载了软件的嵌入式组件。节点还可能是一个网关，允许普通计算机通过USB或以太网端口与CAN网络上的设备通信。&lt;/p&gt;
&lt;p&gt;所有节点通过两根平行的总线连接在一起。两条电线组成一条双绞线，并且接有120Ω的特性阻抗。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ISO 11898-2&lt;/strong&gt;，也称为高速度CAN。它在总线的两端均接有120Ω电阻。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;高速CAN网络 ISO 11898-2&lt;/p&gt;
&lt;p&gt;高速CAN总线在传输显性（0）信号时，会将CAN_H端抬向5V高电平，将CAN_L拉向0V低电平。当传输隐性（1)信号时，并不会驱动CAN_H或者CAN_L端。 显性信号CAN_H和CAN_L两端差分标称电压为2V。 终端电阻在没有驱动时，将差分标称电压降回0V。显性信号（0）的共模电压需要在1.5V到3.5V之间。隐性信号（1）的共模电压需要在+/-12V。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/img-2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;高速CAN信令 ISO 11898-2&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ISO 11898-3&lt;/strong&gt;，也被称作低速或者容错CAN。它使用线性主线，星形主线或者连接到一个线性主线上的多星结构主线著称。每个节点都有终端电阻作为全局终端电阻的一部分。全局终端电阻不应低于100 Ω。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/img-3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;低速容错CAN网络 ISO 11898-3&lt;/p&gt;
&lt;p&gt;低速/容错CAN信号在传输显性信号（0）时，驱动CANH端抬向5V，将CANL端降向0V。在传输隐性信号（1）时并不驱动CAN 总线的任何一端。在电源电压Vcc为5V时，显性信号差分电压需要大于2.3V，隐性信号的差分电压需要小于0.6V。CAN总线两端未被驱动时，终端电阻使CANL端回归到RTH电压（当电源电压Vcc为5V时，RTH电压至少为Vcc-0.3V=4.7V），同时使CANH端回归至RTL电压（RTL电压最大为0.3V）。两根线需要能够承受-27V至40V的电压而不被损坏。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;img&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/can%E9%80%9A%E8%AE%AF%E8%A7%A3%E6%9E%90/img-4.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;低速CAN信令 ISO 11898-3&lt;/p&gt;
&lt;p&gt;在高速和低速CAN中,从隐性信号向显性信号过渡的速度更快，因为此时CAN线缆被主动积极地驱动。显性向隐性的过渡速度主要取决于CAN网络的长度和导线的电容。&lt;/p&gt;
&lt;p&gt;高速CAN通常被用于汽车和工业应用，在这些应用环境中，总线通常从一端横跨至另一端。容错CAN总线则经常被用在需要连接在一起的一组节点。&lt;/p&gt;
&lt;p&gt;ISO规格只要求总线共模电压必须保持在最小和最大范围内，但不定义如何将总线电压保持在这个范围。&lt;/p&gt;
&lt;p&gt;CAN总线必须使用终端电阻。终端电阻可以用来抑制信号反射，同时可以使总线电压回到隐性状态或者闲置状态。&lt;/p&gt;
&lt;p&gt;高速CAN在总线两端使用120Ω电阻。低速CAN在每个节点均使用电阻。也有其他类型的终端，例如ISO 11783中定义了终端偏压电路。&lt;/p&gt;
&lt;p&gt;终端偏压电路使用由4条导线组成的线缆，除了CAN信号线以外还有电源线和地线。这在每段总线两端提供自动偏压和终端功能。ISO11783网络是专为热拔插总线段和电子控制单元设计的。&lt;/p&gt;
&lt;h2 id=&#34;can通信节点&#34;&gt;CAN通信节点：&lt;/h2&gt;
&lt;p&gt;每个节点需要:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;中央处理器、微处理器或主处理器
处理主机决定收到的信息的意思以及想要传输的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;传感器、驱动器和控制设备可以与主处理器连接。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CAN控制器；通常是集成单片机的一部分
接收：CAN控制器将从总线上接收的串位字节存储直到整个消息可用，之后主处理器可以获取这个消息（通常由于CAN控制器触发一个中断）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;发送：主处理器发送传递信息到CAN控制器，之后当总线空闲时将串位信息传递至总线。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;收发器；由ISO11898-2/3介质访问单元（MAU）标准定义
接收：把数据流从CAN总线层转换成CAN控制器可以使用的标准。 CAN控制器通常配有保护电路。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;传输：把来自CAN控制器的数据流转换至CAN总线层。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个节点能够发送和接收信息，但不是同时进行的。 一个消息或帧主要包括标识符(ID)，它表示信息的优先级，最多八个数据字节。CRC、ACK和其他帧部分也是消息的一部分。改进了的CAN FD将每个帧拓展至最多64字节。 消息采用不归零(NRZ)格式串联传送到主线并可被所有节点接收。&lt;/p&gt;
&lt;p&gt;被CAN网络连接的设备通常是传感器，驱动器和其他控制设备。 这些设备通过一个中央处理器、一个CAN控制器和一个CAN接收器连接至总线。&lt;/p&gt;
&lt;h2 id=&#34;数据传输&#34;&gt;数据传输：&lt;/h2&gt;
&lt;p&gt;CAN数据传输如果出现争执，将会使用无损位仲裁解决办法。该仲裁法要求CAN网络上的所有节点同步，对每一位的采样都在同一时间。这就是为什么有人称之为CAN同步。然而，同步这个术语在此并不精确，因为数据以异步格式传输而不包含时钟信号。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
