ToB企服应用市场:ToB评测及商务社交产业平台

标题: 嵌入式开发通讯协议大全(在写中) [打印本页]

作者: 风雨同行    时间: 2025-1-18 00:42
标题: 嵌入式开发通讯协议大全(在写中)
目次
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位数据(保持寄存器)
物理接口规范


注意点:

地址空间设计


通讯速率和超时设置


错误检测与处理


数据类型和格式


并发与多从机支持


干扰和噪声


体系可靠性


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的都自动退出竞争(等待下一次),直到只剩一个装备在发数据。
仲裁的详细步调如下:
iic通讯原理:

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

I²C的时序
I²C的数据传输是基于时钟(SCL)控制的同步通讯。数据(SDA)在时钟的控制下同步传输,时钟由主装备提供。具体的数据传输过程如下:
什么是ACK和NACK
ACK(Acknowledge)和 NACK(No Acknowledge)是I²C通讯中至关重要的信号,它们在每个字节传输后,接收方(无论是主装备还是从装备)都会对接收到的字节进行确认。
ACK(应答信号)
ACK 是接收方对发送的字节的确认,表现数据字节已乐成接收。具体来说:

过程:

例子:

NACK(不应答信号)
NACK 是接收方对数据传输的否定响应,表现接收到的字节没有被正确接收,大概接收方已经不再预备接收更多数据。通常,NACK 用来标识通讯结束或数据传输失败。
过程:

例子:

详细时序示例:怎样理解ACK/NACK
我们通过具体的时序图来理解 ACKNACK 的工作原理。以下是数据传输的时序图:
ACK的时序
假设主装备向从装备发送数据字节,接收方(从装备)通过 ACK 确认接收到数据字节。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → ← ← → 数据字节 ACK

NACK的时序
如果主装备或从装备不再需要接收更多数据,它会通过 NACK 来终止数据传输。
SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
SDA: → → → → → → → ↑ 数据字节 NACK

范例读写操作
在主装备读取数据的情况下,主装备会在末了一个数据字节后发送 NACK,然后发送 STOP 信号,结束通讯。
主装备读取数据的过程:
注意点:

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


2. 通讯速率和时序


3. 电源噪声和信号完整性


4. 数据完整性和错误处理


5. PMBus下令和数据格式


6. 通讯协议细节


7. 电源管理和效率


8. 主装备与从装备的同步


9. 调试和测试


10. 文档和规格说明书



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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4