嵌入式开发常用通信协议(总结)

本文聚焦嵌入式系统,介绍了常用板上通信接口,包括I2C、SPI、UART、1-Wire和并行接口。详细阐述了各接口的特点、组成、工作原理及数据传输格式等,如I2C是两线式串行接口,SPI是4线式串行接口等。

在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。

 

以下内容为常用板上通信接口:包括I2C、SPI、UART、1-Wire

1. I2C总线(Inter Integrated Circuit)

I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义是指在任意给定的时刻,只有一个方向上是可以通信的。I2C总线最早由Philips半导体公司于20世纪80年代研发面市。I2C最初的设计目标是为微处理器/微控制器系统与电视机外围芯片之间的连接提供简单的方法。

I2C总线由两条总线组成:串行时钟线SCL和串行数据线SDA。

SCL线——负责产生同步时钟脉冲。

SDA线——负责在设备间传输串行数据。

I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备负责控制通信,通过对数据传输进行初始化/终止化,来发送数据并产生所需的同步时钟脉冲。从设备则是等待来自主设备的命令,并响应命令接收。主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。在相同的总线上,I2C支持多个主设备的同时存在。图1-1显示了I2C总线上主设备和从设备的连接关系。

                                                                     图1-1

 

                    

                  图1-2 I2C数据传输格式

 

 

     当总线空闲时,SDA 和SCL 都处于高电平状态,当主机要和某个从机通讯时,会先发送一个开始条件,然后发送从机地址和读写控制位,接下来传输数据(主机发送或者接收数据),数据传输结束时主机会发送停止条件。传输的每个字节为8 位,高位在前,低位在后。

 

    • 开始条件: SCL 为高电平时,主机将SDA 拉低,表示数据传输即将开始。

    • 从机地址: 主机发送的第一个字节为从机地址,高7 位为地址,最低位为R/W 读写控制位,1 表示读操作,0 表示写操作。一般从机地址有7 位地址模式和10 位地址模式两种,如果是10 位地址模式,第一个字节的头7 位是11110XX 的组合,其中最后两位(XX)是10 位地址的两个最高位,第二个字节为10 位从机地址的剩下8 位,如下图所示:

                 

                    图1-3: 7 位地址和10 位地址格式

 

    • 应答信号: 每传输完成一个字节的数据,接收方就需要回复一个ACK(acknowledge)。写数据时由从机发送ACK,读数据时由主机发送ACK。当主机读到最后一个字节数据时,可发送NACK(Notacknowledge)然后跟停止条件。

    • 数据: 从机地址发送完后可能会发送一些指令,依从机而定,然后开始传输数据,由主机或者从机发送,每个数据为8 位,数据的字节数没有限制。

    • 重复开始条件: 在一次通信过程中,主机可能需要和不同的从机传输数据或者需要切换读写操作时,主机可以再发送一个开始条件。

    • 停止条件: 在SDA 为低电平时,主机将SCL 拉高并保持高电平,然后在将SDA 拉高,表示传输结束。

 

/*—————————————————————————————*/

2. SPI总线(Serial Peripheral Interface)

SPI总线是同步、双向、全双工的4线式串行接口总线,最早由Motorola公司提出。SPI是由“单个主设备+多个从设备”构成的系统。需要说明的是:在系统中,只要任意时刻只有一个主设备是处于激活状态的,就可以存在多个SPI主设备。常运用于EEPROM、FLASH、实时时钟、AD转换器、数字信号处理器和数字信号解码器之间实现通信。为了实现通信,SPI共有4条信号线,分别是:

                                               图 2-1

(1)主设备出、从设备入(Master Out Slave In,MOSI):由主设备向从设备传输数据的信号线,也称为从设备输入(Slave Input/Slave Data In,SI/SDI)。

(2)主设备入、从设备出(Master In Slave Out,MISO):由从设备向主设备传输数据的信号线,也称为从设备输出(Slave Output/Slave Data Out,SO/SDO)。

(3)串行时钟(Serial Clock,SCLK):传输时钟信号的信号线。

(4)从设备选择(Slave Select,SS):用于选择从设备的信号线,低电平有效。

 

SPI使用方法:

    

             图 2-2

上图所示芯片有2 个SPI 控制器,SPI 控制器对应SPI 主设备,每个SPI 控制器可以连接多个SPI从设备。挂载在同一个SPI 控制器上的从设备共享3 个信号引脚:SCK、MISO、MOSI,但每个从设备的CS 引脚是独立的.

 

主设备通过控制CS 引脚对从设备进行片选,一般为低电平有效。任何时刻,一个SPI 主设备上只有一个CS 引脚处于有效状态,与该有效CS 引脚连接的从设备此时可以与主设备通信。所以,SPI通信方式可以使用“一主多从”的结构进行通信。每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。

 

      从设备的时钟由主设备通过SCLK 提供,MOSI、MISO 则基于此脉冲完成数据传输。SPI 的工作时序模式由CPOL(Clock Polarity,时钟极性)和CPHA(Clock Phase,时钟相位)之间的相位关系决定,CPOL 表示时钟信号的初始电平的状态,CPOL 为0 表示时钟信号初始状态为低电平,为1 表示时钟信号的初始电平是高电平。CPHA 表示在哪个时钟沿采样数据,CPHA 为0 表示在首个时钟变化沿采样数据,而CPHA 为1 则表示在第二个时钟变化沿采样数据。根据CPOL 和CPHA 的不同组合共有4 种工作时序模式:CPOL=0,CPHA=0、CPOL=0,CPHA=1、CPOL=1,CPHA=0、CPOL=1,CPHA=1

 

/*—————————————————————————————*/

3. UART(Universal Asynchronous Receiver/Transmitte)

  UART——通用异步收发传输器,UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。在应用程序开发过程中使用频
率较高的数据总线。

基于UART的数据传输是异步形式的串行数据传输。基于UART的串行数据传输不需要使用时钟信号来同步传输的发送端和接收端,而是依赖于发送设备和接收设备之间预定义的配置。对于发送设备和接收设备来说,两者的串行通信配置(波特率、单位字的位数、奇偶校验、起始位数与结束位、流量控制)应该设置为完全相同。通过在数据流中插入特定的比特序列,可以指示通信的开始与结束。当发送一个字节数据的时候,需要在比特流的开头加上起始位,并在比特流的末尾加上结束位。数据字节的最低位紧接在起始位之后。

UART 串口的特点是将数据一位一位地顺序传送,只要2 根传输线就可以实现双向通信,一根线发送数据的同时用另一根线接收数据。UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用UART 串口通信的端口,这些参数必须匹配,否则通信将无法正常完成。UART 串口传输的数据格式如下图所示:

                                                                              图3-1

• 起始位:表示数据传输的开始,电平逻辑为“0” 。
  • 数据位:可能值有5、6、7、8、9,表示传输这几个bit 位数据。一般取值为8,因为一个ASCII 字符值为8 位。
  • 奇偶校验位:用于接收方对接收到的数据进行校验,校验“1” 的位数为偶数(偶校验) 或奇数(奇校验),以此来校验数据传送的正确性,使用时不需要此位也可以。
  • 停止位:表示一帧数据的结束。电平逻辑为“1”。
  • 波特率:串口通信时的速率,它用单位时间内传输的二进制代码的有效位(bit) 数来表示,其单位为每秒比特数bit/s(bps)。常见的波特率值有4800、9600、14400、38400、115200 等,数值越大数据传
  输的越快,波特率为115200 表示每秒钟传输115200 位数据。

/*—————————————————————————————*/

4. 1-Wire接口

1-Wire接口是由Maxim Dallas半导体公司(首页为http://www.maxim-ic.com)开发的异步半双工通信协议,也称为Dallas 1-Wire®协议。其中,按照主-从通信模型,只使用单条信号线DQ实现通信。1-Wire总线的一个重要特征在于,该总线允许在信号线上传输能量。I2C从设备在信号线上使用内部电容器(其典型取值为800 pF)来驱动设备。1-Wire接口支持在总线上连接单个主设备以及一个或多个从设备。图2-29显示了1-Wire总线上主设备和从设备的连接关系图。

 

5. 并行接口

板上并行接口(parallel interface)通常用于系统与外围设备之间的通信,其中,外围设备通过存储器映射到系统的主控端。只要嵌入式系统的主控处理器/控制器含有并行总线,支持并行总线的设备就可以直接连接到该总线系统上。外围设备与主控端之间具有控制信号接口,可以控制并行总线上的数据通信。这里,通信的控制信号包括读/写信号和设备选择信号。一般说来,外围设备具有设备选择线;只有当主控处理器选通该线的时候,该设备才是有效的。数据传输的方向可以是从主控端到外围设备,也可以是从外围设备到主控端;这是通过读和写控制信号线进行控制的。只有主控处理器能够控制读控制信号和写控制信号。一般说来,外围设备通过存储器映射到主控处理器,从而可以访问分配的地址范围。此时,设备需要使用地址译码电路来产生芯片选择信号。当处理器选择的地址位于设备指定范围内的时候,译码电路对芯片选择线进行触发,从而激活设备。然后,处理器可以使能相应的控制线(分别是RD\与WD\),从而由设备读出数据,或者是向设备写入数据。为了实现并行通信,系统需要严格遵循时序规范。前面已经提到过,并行通信是由主控处理器启动的。如果某外围设备想要对通信进行初始化,那么可以向处理器发出中断,告知相关信息。为了实现上述功能,设备的中断线需要连接到处理器的中断线上,并且主控处理器需要触发相应的中断。需要说明的是,主控处理器的数据总线宽度决定了并行接口的宽度,可以是4位、8位、16位、32位、64位等。设备支持的总线宽度应该与主控处理器完全相同。

 

注:部分内容引自《rt-thread》官方开发手册,在此表示感谢!

附:物联网操作系统rt-thread官方网址:https://www.rt-thread.org/

 

转载于:https://www.cnblogs.com/iriczhao/p/10816426.html

<think>首先,用户的问题是:“我想开发嵌入式系统中的通信协议 请问嵌入式系统开发 通信协议实现 串口通信 网络协议设计”。这似乎是一个关于如何在嵌入式系统中实现通信协议的问题,特别提到了串口通信和网络协议设计。 根据系统级指令,我需要: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 用户提供了几个引用: - 引用[1]:关于串口通信协议,定义了物理层和协议层,数据帧结构包括起始位、主体数据、校验位、停止位,以及波特率。 - 引用[2]:总结嵌入式通信协议种类,包括无线协议如Wi-Fi、BLE、LoRa,强调根据需求选择。 - 引用[3]:关于TCP/IP协议在嵌入式系统中的实现,使用lwIP、uIP等库。 - 引用[4]:关于UART、TTL、RS-232电平标准,以及如何连接电脑。 用户的问题集中在“开发嵌入式系统中的通信协议”,包括串口通信和网络协议设计。所以,我需要基于这些引用,构建一个结构清晰的回答。 我的回答应该包括: 1. **介绍通信协议嵌入式系统中的作用**。 2. **详细解释串口通信的实现**:参考引用[1]和[4]。 3. **讨论网络协议设计**:参考引用[3]。 4. **提供一般开发步骤和注意事项**:参考引用[2]。 5. **生成相关问题**:在最后添加相关问题。 结构: - 开头:简要概述嵌入式系统通信协议的重要性。 - 主体:分节讨论串口通信和网络协议设计。 - 串口通信:包括硬件接口、协议层、数据帧格式、波特率设置等。 - 网络协议设计:包括TCP/IP实现、选择库如lwIP、协议栈配置。 - 结尾:总结开发要点,并添加相关问题。 确保使用LaTeX格式: - 行内数学表达式:如波特率计算,使用$...$。 - 独立公式:如果有,如数据速率公式,使用$$...$$并单独成段。 添加引用标识: - 在相关段落末尾自然地添加[^1]、[^2]等。 最后,生成相关问题: - 基于回答内容,提出3-5个相关问题。 完整回答: 1. **介绍**:嵌入式系统中的通信协议是设备间数据传输的基础,包括串口、网络等。 2. **串口通信实现**: - 物理层:硬件接口如UART,电平标准如TTL或RS-232[^4]。 - 协议层:数据帧格式如起始位、数据位、校验位、停止位[^1]。 - 波特率设置:例如,波特率$B$表示每秒传输的符号数。 3. **网络协议设计**: - 使用TCP/IP协议栈,如lwIP库[^3]。 - 实现TCP、UDP等协议。 - 考虑嵌入式资源限制。 4. **开发步骤**: - 选择协议:根据需求如速率、距离选择有线或无线协议[^2]。 - 硬件选型:选择合适的微控制器和接口。 - 软件实现:编写驱动和协议处理代码。 5. **相关问题**:在最后添加。 确保回答真实可靠:基于提供的引用和一般知识。</think>### 嵌入式系统通信协议开发指南 在嵌入式系统开发中,通信协议是实现设备间数据传输的核心,包括串口通信(如UART)和网络协议(如TCP/IP)。设计时需要兼顾硬件约束(如资源有限)和协议效率。以下我将逐步解释开发流程,重点覆盖串口通信和网络协议设计,并基于可靠参考源提供实用建议。开发过程分为需求分析、硬件选型、协议实现和测试优化四个阶段。 #### 1. **需求分析与协议选择** - **明确需求**:首先确定通信场景,如数据传输速率、距离、功耗和可靠性。例如: - 短距离、低速通信(如传感器数据采集)适合串口协议(UART),成本低且易于实现[^1]。 - 远距离、高速通信(如物联网设备联网)需网络协议(TCP/IP),支持互联网连接[^3]。 - **选择协议类型**: - **串口通信**:基于异步串行协议,物理层定义电平标准(如TTL或RS-232),协议层定义数据帧格式(起始位、数据位、校验位、停止位)。波特率(baud rate)是关键参数,表示每秒传输的符号数,计算公式为$B = \frac{1}{T}$,其中$T$是每个符号的持续时间[^1][^4]。 - **网络协议**:常用TCP/IP栈(如lwIP、uIP),支持TCP(可靠传输)、UDP(高速无连接)等。无线协议(如BLE或Wi-Fi)适用于移动设备,但需更高功耗[^2][^3]。 - 一般原则:根据项目需求权衡,例如低功耗设备优先选择串口或BLE,高带宽场景用TCP/IP[^2]。 #### 2. **硬件选型与接口设计** - **串口通信硬件**: - 物理层:使用UART接口(TX、RX、GND引脚),电平标准选TTL(0V/3.3V)或RS-232(负逻辑电平)。避免接VCC线,防止电源冲突[^4]。 - 连接方式:调试时需电平转换器(如USB-TTL适配器)连接PC,生成虚拟COM口[^4]。 - **网络协议硬件**: - 选择带网络接口的微控制器(如ESP32或STM32),集成以太网或Wi-Fi模块。 - 资源考虑:嵌入式TCP/IP栈(如lwIP)需至少20KB RAM,适合资源受限系统[^3]。 - **通用建议**:优先选择集成通信外设的MCU,减少外部电路,降低成本。 #### 3. **协议实现步骤(软件层)** - **串口通信实现**: 1. **初始化硬件**:配置UART寄存器,设置波特率(如9600 bps)。波特率误差需小于5%,否则数据错误。计算公式: $$ \text{Baud Rate} = \frac{\text{系统时钟}}{\text{分频系数}} $$ 例如,系统时钟16MHz,分频系数1667,可得约9600 bps[^1]。 2. **数据帧处理**:发送/接收数据时,按帧格式封装: - 起始位(1 bit,低电平)。 - 数据位(8 bit,主体数据)。 - 校验位(可选,奇偶校验)。 - 停止位(1-2 bit,高电平)。 代码示例(C语言): ```c // UART发送函数 void UART_Send(uint8_t data) { while (!UART_Ready()); // 等待就绪 UART_DR = data; // 写入数据寄存器 // 添加校验逻辑(如奇偶校验) } ``` 3. **错误处理**:添加超时机制和校验重传,提升可靠性[^1][^4]。 - **网络协议实现**: 1. **协议栈集成**:使用轻量级库如lwIP,初始化TCP/IP栈: ```c #include "lwip/init.h" void net_init() { lwip_init(); // 初始化协议栈 // 配置IP地址和端口 } ``` 2. **协议设计**: - TCP:用于可靠传输(如文件下载),实现三次握手。 - UDP:用于实时应用(如视频流),减少延迟。 数据包格式需符合标准,例如IP包头包含源/目的地址[^3]。 3. **资源优化**:关闭未用协议(如ICMP),缩减栈大小;使用DMA减少CPU负载[^3]。 - **通用开发工具**: - 调试器:如逻辑分析仪捕获串口信号。 - 模拟器:QEMU测试网络协议逻辑。 - 版本控制:Git管理代码,确保可追溯。 #### 4. **测试与优化** - **功能测试**: - 串口:用PC串口助手发送数据,验证帧正确性。 - 网络:Ping测试连通性,Wireshark分析包丢失率。 - **性能优化**: - 串口:提高波特率(如115200 bps)增加速率,但需平衡噪声影响[^1]。 - 网络:调整TCP窗口大小,优化吞吐量;无线协议用休眠模式降功耗[^2][^3]。 - **安全考虑**:添加加密(如TLS)或校验(CRC),防止数据篡改。 #### 总结 开发嵌入式通信协议时,串口通信适合简单、低功耗场景,而网络协议支持复杂联网需求。核心是匹配硬件能力与协议效率,引用[2]强调“根据具体需求(如传输速率、通信距离、功耗等)选择合适的协议”[^2]。实践中,优先使用成熟库(如lwIP)减少开发周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值