嵌入式开发通讯协议大全(在写中)

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

目次
modbus RTU通讯协议:

pmbus通讯协议:



modbus RTU通讯协议:

重要应勤奋能:

规范了软件变量,访问功能码,给差别工程师开发的差别产品有同一的通讯标准
帧结构简朴,占用带宽少,编程简朴,通讯响应速率快,可以适配别家公司通讯上位机。
一主机多从机(可达247),有crc校验功能,对工业控制范畴有着极好的适应性。
传输非常从装备会告知主装备
参考资料:

变量类型:

线圈(Coils)用于表现装备的开/关状态,通常控制输出(如电机启停、灯开关等)1 位读/写(可读和可写)读取:0x01
写入:0x05, 0x0F
离散输入(Discrete Inputs)用于表现装备的输入状态(如传感器、按钮等),只读1 位只读读取:0x02
保持寄存器(Holding Registers)用于存储装备的控制参数、配置数据或实时数据(如温度、湿度、速率等)16 位(2 字节)读/写(可读和可写)读取:0x03
写入:0x06, 0x10
输入寄存器(Input Registers)用于存储装备的输入数据(如传感器测量值),只读16 位(2 字节)只读读取:0x04

功能码:

0x01读取线圈(Read Coils)读取指定范围内的线圈状态(0 或 1)只读二进制数据(线圈)
0x02读取离散输入(Read Discrete Inputs)读取指定范围内的离散输入状态(0 或 1)只读二进制数据(离散输入)
0x03读取保持寄存器(Read Holding Registers)读取指定范围内的保持寄存器数据(16位寄存器的值)只读16位数据(保持寄存器)
0x04读取输入寄存器(Read Input Registers)读取指定范围内的输入寄存器数据(16位寄存器的值)只读16位数据(输入寄存器)
0x05写单个线圈(Write Single Coil)写入单个线圈的状态(0 或 1)读/写二进制数据(线圈)
0x06写单个保持寄存器(Write Single Register)写入单个保持寄存器的值(16位数据)读/写16位数据(保持寄存器)
0x0F写多个线圈(Write Multiple Coils)写入多个线圈的状态(多个 0 或 1)读/写二进制数据(线圈)
0x10写多个保持寄存器(Write Multiple Registers)写入多个保持寄存器的值(多个 16位数据)读/写16位数据(保持寄存器)
物理接口规范



  • Modbus RTU通讯通常基于RS-232或RS-485串行通讯标准,这些标准决定了数据传输的电气特性。为包管装备间正确的物理连接和数据传输,必须清晰接口规范。
  • RS-232:适用于短间隔通讯,通常用于单一装备通讯。
  • RS-485:适用于长间隔、高噪声情况,并且支持多从机的通讯。Modbus RTU协议常用RS-485进行装备间通讯。
注意点:

地址空间设计



  • 合理规划地址:Modbus协议有差别的地址空间(线圈、离散输入、保持寄存器、输入寄存器),每个装备的每种类型数据都有其特定的地址范围。需要根据项目需求合理规划每个变量的地址,避免地址辩论。

    • 线圈(Coils):地址范围 0x0000 - 0x07FF
    • 离散输入(Discrete Inputs):地址范围 0x1000 - 0x17FF
    • 保持寄存器(Holding Registers):地址范围 0x4000 - 0x47FF
    • 输入寄存器(Input Registers):地址范围 0x3000 - 0x37FF

  • 装备地址唯一性:每个从装备都应该有唯一的地址(通常为1-247),主装备通过该地址来区分差别的从装备。
通讯速率和超时设置



  • 波特率设置:确保通讯中主机和从机的波特率(比方9600、19200等)一致,以包管数据的稳定传输。
  • 超时设置:Modbus是一个实时协议,主机和从机之间的通讯应该考虑得当的超时时间。过短的超时时间可能导致通讯失败,而过长的超时时间会影响体系的响应性。
  • 重试机制:在网络不稳定时,可能会出现通讯停止,设计时要有重试机制,以防止丢失重要数据。
错误检测与处理



  • CRC校验:Modbus RTU 使用 CRC(循环冗余校验) 来检查数据传输过程中是否发生错误。确保在开发中正确实现CRC算法。
  • 错误码:Modbus协议会返回错误码,主机需要根据返回的错误码进行相应的处理。常见错误码包括:

    • 0x01:非法功能码
    • 0x02:非法数据地址
    • 0x03:非法数据值
    • 0x04:装备故障
    在编程时要确保主机能够正确辨认并处理这些错误码。
数据类型和格式



  • 数据类型的转换:Modbus协议传输的数据是以16位寄存器为单位的,对于差别的应用场景,可能需要对数据进行字节顺序转换(如大端/小端)和数据类型转换(如浮点数、整型数等)。

    • 大端/小端问题:注意Modbus接纳大端格式(高字节在前),但在某些平台或语言情况下,可能需要转换为小端格式(低字节在前)。比方,如果从机传输浮点数,需要将两个寄存器的数据合并为一个32位浮点数。

并发与多从机支持



  • 一主机多从机:Modbus协议支持一主机与多从机的通讯,最大支持247个从机。如果项目需要同时控制多个从装备,需要特别注意:

    • 每个从装备的地址应唯一。
    • 主机需要按照一定的顺序与从装备通讯,以防止总线辩论。
    • 考虑到从装备响应时间可能差别,要在程序中设置合理的延时,以确保稳定的通讯。

干扰和噪声



  • 噪声干扰:Modbus RTU通常在串口上工作,可能会受到电磁干扰(EMI)。确保使用的串口线缆和连接器能够有用屏蔽干扰,同时合理布置通讯线路,避免长间隔传输。
  • 信号衰减:如果通讯间隔较长(特别是RS-485),需要考虑信号衰减的问题,可能需要使用信号增强装备(如RS-485信号放大器)。
体系可靠性



  • 冗余设计:对于重要的控制体系,考虑冗余设计。比方,在主机或从机故障时,体系能够自动切换到备用体系,包管项目的高可用性。
  • 通讯丢失处理:设计通讯丢失或数据丢失后的恢复机制,比方超时重试或自动重启功能,以确保装备在通讯停止后能尽快恢复正常。
pmbus通讯协议:

重要应勤奋能:

专门用于电源管理体系中的电源装备之间的数字化通讯,如电源模块、监控芯片和电池管理体系等
基于iic硬件外设通讯,一主多从,100k~3.4mbps,可多主机(需引入仲裁机制,无优先级)
参考资料:

帧格式:

读:

START(起始条件)1起始信号,表现通讯开始(SDA拉低,SCL保持高电平)。
从装备地址17位装备地址 + 1位读标志(1表现读操作)。
下令字节1主装备指定的下令字节,表现需要执行的读取操作(比方读取电压)。
ACK1发送下令字节后,接收方发送ACK应答,表现下令字节已正确接收。
数据字节N从装备返回的数据字节,通常是多个字节(比方电压、温度等)。
NACK1数据接收完毕后,主装备发送NACK,告诉从装备停止数据传输。
STOP(停止条件)1停止信号,表现通讯结束,SDA从低电平跳到高电平,SCL保持高电平。
写:

START(起始条件)1起始信号,表现通讯开始(SDA拉低,SCL保持高电平)。
从装备地址17位装备地址 + 1位写标志(0表现写操作)。
下令字节1主装备指定的下令字节,表现需要执行的操作(比方设置电压)。
数据字节N根据下令,传输1到多个字节的数据(比方设置输出电压)。
ACKN每个字节传输后,接收方发送ACK应答,表现该字节已正确接收。
STOP(停止条件)1停止信号,表现数据传输完毕,SDA从低电平跳到高电平,SCL保持高电平。
常见变量定义表格

变量名称作用下令字节内存大小单位说明VOUT (输出电压)电源模块的输出电压0x212毫伏(mV)包含低字节和高字节,用于设置或读取电源的输出电压。IOUT (输出电流)电源模块的输出电流0x222毫安(mA)包含低字节和高字节,用于设置或读取电源的输出电流。VIN (输入电压)电源模块的输入电压0x232毫伏(mV)包含低字节和高字节,用于设置或读取电源的输入电压。POUT (输出功率)电源模块的输出功率0x242毫瓦(mW)包含低字节和高字节,用于读取电源的输出功率。TEMP (温度)电源模块的温度0x862摄氏度(℃)包含低字节和高字节,表现电源的当前温度值。FAULT_STATUS (故障状态)电源模块的故障状态0x781无单位一个字节的状态字,表现电源模块的当前故障状态。STATUS_WORD (状态字)电源模块的综合状态,包括过流、过压、欠压等故障信息0x032无单位包含低字节和高字节,表现电源的状态(包括故障标志)。CONTROL (控制)电源的控制下令,开启、关闭或重启电源等操作0x011无单位一个字节,表现电源的控制下令,如启动、关闭电源等操作。TON_DELAY (开机延迟)电源的开机延迟时间0x312毫秒(ms)包含低字节和高字节,表现开机延迟的时间,单位为毫秒。TOFF_DELAY (关机延迟)电源的关机延迟时间0x322毫秒(ms)包含低字节和高字节,表现关机延迟的时间,单位为毫秒。VOUT_OV_FAULT_LIMIT (输出电压过压掩护限定)设置输出电压的过压掩护阈值0x452毫伏(mV)包含低字节和高字节,用于设置输出电压的过压掩护阈值。VOUT_UV_FAULT_LIMIT (输出电压欠压掩护限定)设置输出电压的欠压掩护阈值0x462毫伏(mV)包含低字节和高字节,用于设置输出电压的欠压掩护阈值。IOUT_OC_FAULT_LIMIT (输出电流过流掩护限定)设置输出电流的过流掩护阈值0x472毫安(mA)包含低字节和高字节,用于设置输出电流的过流掩护阈值。IOUT_UC_FAULT_LIMIT (输出电流欠流掩护限定)设置输出电流的欠流掩护阈值0x482毫安(mA)包含低字节和高字节,用于设置输出电流的欠流掩护阈值。VIN_OV_FAULT_LIMIT (输入电压过压掩护限定)设置输入电压的过压掩护阈值0x492毫伏(mV)包含低字节和高字节,用于设置输入电压的过压掩护阈值。VIN_UV_FAULT_LIMIT (输入电压欠压掩护限定)设置输入电压的欠压掩护阈值0x4A2毫伏(mV)包含低字节和高字节,用于设置输入电压的欠压掩护阈值。VOUT_OV_WARN_LIMIT (输出电压过压警告阈值)设置输出电压的过压警告阈值0x592毫伏(mV)包含低字节和高字节,用于设置输出电压的过压警告阈值。VOUT_UV_WARN_LIMIT (输出电压欠压警告阈值)设置输出电压的欠压警告阈值0x5A2毫伏(mV)包含低字节和高字节,用于设置输出电压的欠压警告阈值。IOUT_OC_WARN_LIMIT (输出电流过流警告阈值)设置输出电流的过流警告阈值0x5B2毫安(mA)包含低字节和高字节,用于设置输出电流的过流警告阈值。IOUT_UC_WARN_LIMIT (输出电流欠流警告阈值)设置输出电流的欠流警告阈值0x5C2毫安(mA)包含低字节和高字节,用于设置输出电流的欠流警告阈值。MFR_TEMP (制造商温度)读取装备的温度,通常与故障或状态有关0x862摄氏度(℃)包含低字节和高字节,用于查询装备的温度。MFR_VIN (制造商输入电压)读取装备的输入电压值0x872毫伏(mV)包含低字节和高字节,用于查询装备的输入电压。MFR_VOUT (制造商输出电压)读取装备的输出电压值0x882毫伏(mV)包含低字节和高字节,用于查询装备的输出电压。MFR_IOUT (制造商输出电流)读取装备的输出电流值0x892毫安(mA)包含低字节和高字节,用于查询装备的输出电流。MFR_POWER (制造商功率)读取装备的输出功率值0x8B2毫瓦(mW)包含低字节和高字节,用于查询装备的输出功率。 仲裁机制:

在iic多主机通讯时,因为总线同一时间内只能有一个装备在发数据,这个时间就需要引入仲裁机制,在多装备同时通讯时,末了只留下1个装备,别的装备下次再竞争。简朴来说,假设有AB两个装备同时往数据线SDA上发送数据,它们都会实时监控线路上的电平,来确保数据是否发送正确,当A装备发送1,B装备发送0,这时SDA上就会是0(因为低电平有更强的驱动能力),此时A装备就会知道数据线有其他装备在用,将不再发送数据,等待下一次数据线空闲,纵然有n多个装备在竞争,都是从头一个一个位开始竞争,谁出0时,其他出1的都自动退出竞争(等待下一次),直到只剩一个装备在发数据。
仲裁的详细步调如下:

  • 数据传输的启动

    • 在I²C总线上的多个主装备同时实验发送数据时,它们都会生成时钟信号(SCL)并开始通过SDA线发送数据位(bit)。

  • 总线监控

    • 每个主装备都会在每一位数据发送时实时监控SDA线的电平,确保它发送的数据与总线上实际的电平一致。
    • SDA线的电平是由主装备驱动的。当主装备向总线发送数据时,它会拉低(0)或拉高(1)SDA线。

  • 发生辩论时的检测

    • 如果一个主装备试图向总线发送1(拉高SDA),而另一个主装备却试图发送0(拉低SDA),就发生了辩论。
    • 监测到辩论:在这个过程中,每个主装备都会监听到SDA线上的实际状态。如果它发送的数据与SDA线的状态不一致,说明有其他主装备正在控制总线,因此发生了辩论。

  • 决定仲裁优先级

    • SDA线上的状态决定优先级:在I²C协议中,低电平(0)具有更高的优先级,缘故原由是SDA线由主装备拉低时,电流驱动较强。
    • 如果一个主装备发现SDA线上的电平与自己预期的差别,它就会停止数据传输,放弃对总线的控制,并让其他主装备继续控制总线。

  • 放弃与重试

    • 当发生辩论时,失败的主装备会立刻停止传输,退出当前的总线控制,并等待一段随机时间后重新实验访问总线。
    • 胜出的主装备将继续占用总线,完成其数据传输。

iic通讯原理:

I²C通讯基于主从(Master-Slave)模型,通讯过程中包含两个重要脚色:


  • 主装备(Master):发起通讯、控制时钟和数据流的装备。
  • 从装备(Slave):响应主装备请求的装备。
I²C的时序
I²C的数据传输是基于时钟(SCL)控制的同步通讯。数据(SDA)在时钟的控制下同步传输,时钟由主装备提供。具体的数据传输过程如下:

  • 起始条件(START)

    • 主装备拉低 SDA 线,在 SCL 高电平时发出起始信号。
    • 起始条件标志着通讯的开始。

  • 从装备地址和读/写操作

    • 主装备会发送一个包含从装备地址和读/写标志位的数据。装备地址通常是7位或10位(通常是7位)。
    • 读/写标志位(R/W):0 表现写操作,1 表现读操作。

  • 数据传输

    • 数据按字节(8位)进行传输,SDASCL 的上升沿采样,每传输一个字节时都要包管 SDA 在时钟的上升沿之前保持稳定。

  • 应答信号(ACK/NACK)

    • 每次发送一个字节后,接收方(无论是主装备还是从装备)必须发送一个应答信号 ACKNACK,表现数据是否乐成接收。

  • 停止条件(STOP)

    • 主装备通过拉高 SDA 线,在 SCL 高电平时发出停止信号,表现通讯结束。

什么是ACK和NACK
ACK(Acknowledge)和 NACK(No Acknowledge)是I²C通讯中至关重要的信号,它们在每个字节传输后,接收方(无论是主装备还是从装备)都会对接收到的字节进行确认。
ACK(应答信号)
ACK 是接收方对发送的字节的确认,表现数据字节已乐成接收。具体来说:


  • ACK信号 是通过 SDA 线在 SCL 时钟上升沿时传递的。
  • 在接收到数据字节后,接收方会将 SDA 拉低(0),表现已正确接收数据。
过程:


  • 主装备或从装备发送完一个字节的数据后,接收方(无论是主装备还是从装备)必须发送 ACK 信号。
  • 如果接收方已经接收到数据并预备好接收下一个字节,SDA 被拉低。
例子:


  • 主装备发送装备地址后,从装备返回 ACK,表现装备地址已接收并预备好与主装备通讯。
  • 主装备发送数据字节后,从装备返回 ACK,表现数据字节已乐成接收。
NACK(不应答信号)
NACK 是接收方对数据传输的否定响应,表现接收到的字节没有被正确接收,大概接收方已经不再预备接收更多数据。通常,NACK 用来标识通讯结束或数据传输失败。
过程:


  • 接收方在接收到字节后,拉高 SDA(1)表现 NACK,表明不再接收数据。
  • 在读取数据时,主装备通过发送 NACK 信号来结束数据接收,指示接收过程已经完成。
例子:


  • 主装备在读取数据时,读取完所有渴望的字节后,会发送 NACK,表现不再继续读取。
  • 如果从装备出现错误或无法接收数据,可能会发送 NACK
详细时序示例:怎样理解ACK/NACK
我们通过具体的时序图来理解 ACKNACK 的工作原理。以下是数据传输的时序图:
ACK的时序
假设主装备向从装备发送数据字节,接收方(从装备)通过 ACK 确认接收到数据字节。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → ← ← → 数据字节 ACK


  • SCL:时钟线(每个上升沿同步采样数据)。
  • SDA:数据线。
  • 数据字节:主装备或从装备发送的8位数据。
  • ACK:接收方通过将 SDA 拉低来发送 ACK(表现字节已正确接收)。
NACK的时序
如果主装备或从装备不再需要接收更多数据,它会通过 NACK 来终止数据传输。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → → → ↑ 数据字节 NACK


  • NACK:接收方通过将 SDA 拉高来发送 NACK(表现不再接收数据)。
范例读写操作
在主装备读取数据的情况下,主装备会在末了一个数据字节后发送 NACK,然后发送 STOP 信号,结束通讯。
主装备读取数据的过程:

  • 发送下令字节(比方装备地址),接收方发送 ACK
  • 读取数据字节,接收方发送 ACK,表现继续传输数据。
  • 读取完末了一个字节,接收方发送 NACK,表现结束读取。
  • 主装备发送 STOP 信号,表现通讯结束。
注意点:

1. 协议的兼容性和装备选择



  • 装备兼容性:起首确保所选的PMBus装备支持所需的下令和功能。差别的电源管理装备可能实现了差别的PMBus下令集或具有差别的功能扩展。
  • 地址设置:PMBus装备通常通过硬件配置(如跳线或拨码开关)或软件配置来设置装备地址。确保主装备能够正确辨认从装备的地址。
  • 支持的PMBus版本:PMBus协议有多个版本(如1.1、1.2、2.0等),差别版本的装备支持的下令集和功能可能有所差别。确保你的主装备和从装备兼容同一版本。
2. 通讯速率和时序



  • 时钟频率(SCL):PMBus通常基于I²C通讯协议,因此时钟频率需要考虑通讯速率的要求。I²C的标准频率为100 kHz(标准模式),快速模式为400 kHz。如果装备支持高速通讯,可能需要选择合适的速率。
  • 时序和响应时间:PMBus的通讯帧可能需要一定的时间来处理和响应。在进行通讯时,需要考虑每个下令的处理时间以及从装备的响应时间,尤其是在高速传输时,确保每个数据字节都能被正确读取。
3. 电源噪声和信号完整性



  • 电源噪声:PMBus装备通常涉及电源管理功能,电源噪声可能会干扰信号传输,尤其是在传输较长间隔或存在较强电磁干扰的情况中。确保体系设计考虑到电源去耦和滤波,以避免噪声影响通讯。
  • 信号完整性:在高频率下,I²C信号可能受到串扰或衰减的影响,特别是长线缆传输时。可以接纳合理的布线和信号调节(比方使用终端电阻)来包管信号质量,避免通讯错误。
4. 数据完整性和错误处理



  • 数据校验:PMBus协议支持使用校验和来确保数据的完整性。在发送下令或数据时,检查从装备是否返回ACK应答,以确保数据传输没有丢失或破坏。
  • 错误处理:在实际应用中,可能会碰到通讯失败、装备无响应等情况。需要在代码中实现错误检测和重试机制,确保装备在发生通讯非常时能够恢复正常工作。
  • 超时和重试机制:在通讯中,如果没有实时收到ACK,大概装备无响应,可以设计超时和重试机制,避免体系因装备故障或信号丢失导致功能丧失。
5. PMBus下令和数据格式



  • 下令集:确保使用的PMBus下令集符合所选装备的需求。差别的装备可能会支持差别的下令集,常见的如读取电压、设置电流、读取温度等。检查装备文档,相识每个下令的格式和数据长度。
  • 数据字节的解释:PMBus中的每个下令可能会返回多个字节的数据(如电压、电流、功率等),每个数据字节通常接纳二进制编码情势。需要理解怎样解析这些数据,并将其转换为物理量(比方电压、功率等)。
6. 通讯协议细节



  • I²C与PMBus的关系:PMBus是基于I²C协议实现的,因此你需要理解I²C的根本通讯原理,尤其是ACK/NACK的处理机制、起始/停止信号等。在处理PMBus下令时,I²C的时序和数据传输规则同样适用。
  • 装备地址和读/写操作:PMBus使用7位装备地址(加上读/写标志位)。确保在发送下令时正确指定目标装备的地址,并且在读取数据时使用正确的读/写操作标志。
  • 多装备支持:如果体系中有多个PMBus装备,需要确保每个装备的地址唯一且正确设置。并且在使用多个装备时要注意避免数据辩论。
7. 电源管理和效率



  • 功率管理:PMBus装备通常涉及功率转换和管理,在设计时需要确保每个装备的电源输入稳定。设计中还需要考虑怎样通过PMBus下令优化功率效率,比方调整电压、电流等参数。
  • 状态监控和报警:许多PMBus装备具备状态监控和报警功能,如温度、过流、过压等。可以通过PMBus下令读取装备的状态信息,获取装备的健康状况,并进行相应的调节或报警处理。
8. 主装备与从装备的同步



  • 主装备同步:作为主装备,你需要控制整个PMBus通讯的时序和数据流。在通讯过程中要确保每个下令的发送顺序和数据的读取都按照协议规范进行。
  • 从装备响应:从装备需要在接收到下令后实时返回正确的响应。如果从装备响应错误或没有返回,可能需要进行重试或错误处理。
9. 调试和测试



  • 使用调试工具:在PMBus通讯过程中,调试工具如逻辑分析仪、示波器等非常重要。通过这些工具可以监控I²C总线的通讯时序,检查数据传输的正确性和信号质量。
  • 模拟和测试:在开发过程中,使用模拟器来模拟PMBus装备和主装备之间的通讯,可以更容易地进行开发和调试。通过模拟可以确保差别下令的执行和响应符合预期。
10. 文档和规格说明书



  • 装备手册:确保阅读装备的规格说明书,理解装备支持的下令集、数据格式、寄存器地址等。每个PMBus装备的操作可能有所差别,文档提供了下令执行和数据解析的详细信息。
  • 协议版本:检查所用装备支持的PMBus协议版本(如1.2、2.0等),差别版本之间可能有差别的功能和兼容性要求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

风雨同行

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表