I2C,SPI,DAC,看门狗,MODBUS-TCP
I2C介绍1.什么是I2C总线协议I2CInter-Integrated Circuit)集成电路总线是一种广泛用于嵌入式系统的同步、串行、半双工通信协议用于在同一块电路板上的集成电路之间进行通信。I2C总线是一种物理通信架构用于连接多个设备实现设备之间的数据传输。I2C协议是一套规则定义了IIC总线上数据通信的过程包括如何启动通信、传输数据、应答信号、结束通信等。2.I2C总线的特点1.双线通信SCL:负责同步数据 SDA:负责数据传输2.同步通信数据传输由时钟信号线控制确保同步。3.串行数据传输每次只传输一位数据通过时间序列完成完整的数据包传输。4.半双工传输在同一时间内通信双方只能有一个方向的数据传输即发送方和接收方需要轮流接收或发送数据不能同时进行。5.主从架构主设备Master控制通信过程生成时钟信号从设备Slave被动响应主设备的命令6.支持多主多从同一总线上可以连接多个主设备和从设备但需要进行冲突检测和仲裁7.从机地址唯一性每个从设备都有一个唯一的7位或10位从机地址主设备通过从机地址指定要通信的从设备8.速度灵活标准模式(Standard Mode)100KHz快速模式Fast Mode)400KHz高速模式(High-Speed Mode)3.4 MHz超高速模式(Ultra-Fast Mode)5 MHz3.I2C协议1.I2C信号I2C总线为开漏输出结构外部需要接上拉电阻维持高电平I2C总线空闲表现为时钟线和数据线均保持高电平持续一段时间。2、数据的有效性I2C是电平触发采样SDA的可变化时机数据线SDA上的数据只能在时钟线SCL为低电平时进行改变。SDA的稳定性SCL为高电平期间SDA必须保持稳定。在SCL为高电平时SDA上的数据被视为有效接收方会在这个时刻对SDA的状态进行采样。3、数据的传输单元(单位)I²C总线以字节8位为单位传输数据每次传输一个字节。4、数据的传输顺序(MSBor LSB)在I²C数据传输中数据的传输顺序是MSB先传输。5、数据传输方向(读or写)主机是要给从机发送数据还是要读取从机的数据。SPI介绍SPI总线是一种用于在微控制器和外部设备之间进行串行通信的同步通信协议。它常用于连接微控制器与外部设备如传感器存储器外部ADC模数转换器等。1.SPI通信引脚SPI总线通常由4根线组成包括SCK,MOSI,MISO,NSS/CS.SCK由主设备通常是微控制器提供时钟信号用于同步数据的传输。MOSI主设备将数据发送到从设备的线路。MISO:从设备将数据发送到主设备的线路。CS用于选择特定的从设备进行通信。当片选线被拉低时表示从设备被选中可以进行通信当片选线被拉高时表示通信结束或者没有被从设备选中。数据传输原理通信始终由主器件发起。当主器件通过MOSI引脚向从设备发起数据时从器件同时通过MISO引脚做出响应。这是一个数据输出和数据输入都由同一时钟进行同步的全双工通信过程。2.SPI的传输方式SPI总线有三种传输方式全双工半双工以及单工传输全双工传输半双工传输在同一个时刻只能为一个传输方向。在SPI的半双工通信模式下SCK用于时钟输出MOSI信号线主模式下或MISO信号线从模式下用于数据传输。SPI为主模式时SPI为从模式时单工传输在同一时刻只有一个传输方向只能发送或者只能接收。只发送模式其实就是全双工模式在发送引脚主模式下的MOSI或从模式下的MISO上发送数据接收引脚主模式下的MISO或从模式下的MOSI可用作通用IO引脚在这种情况下应用程序只需要忽略接收缓冲区中的数据即可。只接收模式下如果是主模式片选拉低且使能了SPI时通信会立即开始只有当SPI控制器被关闭禁止且当前接收结束时才停止如果是从模式只有片选信号被拉低并且一直有来自主器件的SCK输入SPI就会继续接收数据。3.SPI通信协议SPI通信是一种同步通信意味着数据的传输需要在主设备和从设备之间保持同步。根据时钟信号设备得以在正确的时机发送和接收数据从而确保数据传输的有效性以及数据传输的速度。时钟信号由主设备产生通过SCK引脚输出主从设备的通信便根据SCK上的时钟信号进行数据收发。SPI控制器挂载在APB2时钟总线上使用的是APB2时钟总线提供的时钟SPI控制器自身还有一个时钟分频器用于将APB2总线上的时钟进行一定系数的分频后在进行输出。时钟的分频系数由SPLCR1寄存器中的BR位控制。从器件选择NSS引脚管理片选引脚有两种方式软件管理片选引脚和硬件管理片选引脚软件管理片选引脚既不使用SPI控制器自身的NSS引脚使用普通的IO引脚控制片选。硬件管理片选引脚使用SPI控制器自身的NSS引脚进行设备的片选。NSS有两种模式片选引脚拉至低电平是使能运行片选引脚拉高时是取消片选。数据帧格式数据帧长度每个数据帧的长度均为8位或者16位数据帧方式格式进行数据的发送时可以从最高有效位开始发送MSB也可以从最低有效位开始发送LSB。时钟极性和时钟相位时钟极性CPOL为0时SCK时钟线空闲状态下时低电平为1时是高电平。时钟相位CPHA为1时采样数据的第二个边沿。为0时采样数据的第一个边沿。相互结合有4种可能的时序关系DAC控制器数字-模拟转换器是一种将数字信号通常是二进制数转换为模拟信号连续变化的电压或电流信号的电子设备。其核心作用是将离散的数字信号转换成可直接驱动物理世界的连续信号通常用于音频视频传感器控制测量等领域。1.DAC的种类R-2R梯形DAC最常见的DAC之一基于电阻的网络加权电阻DAC每个输入位权重不同电流型DAC通过控制电流源输出模拟信号Sigma-Delta DAC:基于过采样和噪声整形的DAC2.DAC的性能参数分辨率转换精度通常用位数表示如8位16位24位采样率每秒钟处理的样本数通常以赫兹为单位信噪比SNR输出信号与噪声的比例总谐波失真THD描述了在输出的模拟信号中除去理想信号的基频原始信号之外其他频率成分即谐波的相对强度。线性度输入到输出信号之间的关系是否是线性的3.DAC的使用原理DAC模块是12位电压输出数模转换器。DAC可以按8位或12位模式进行配置并且可与DMA控制器配合使用。在12位模式下数据可以采用左对齐或右对齐。DAC有两个输出通道每个通道各有一个转换器。在DAC双通道模式下每个通道可以单独进行转换当两个通道组合在一起同步执行更新操作时也可以同时进行转换。可通过一个输入参考电压引脚VREF与ADC共享来提高分辨率。4.DAC 主要特性两个DAC 转换器各对应一个输出通道12位模式下数据采用左对齐或右对齐同步更新功能生成噪声波生成三角波使用原理参考电压对齐保持寄存器触发模式生成波输出缓冲器对齐保持寄存器对于DAC通道X必须将想要转换的数据输入到下面三个寄存器中8位右对齐12位左对齐12位右对齐。触发模式自动触发对齐保持寄存器中写入数据后立即转换到DORX寄存器中。触发模式软触发定时器触发外部引脚触发。生成波DHRx中的数值不仅可以直接搬运到DORx寄存器输出还可以叠加生成波来实现叠加信号输出。分为三角波和噪声波。独立看门狗看门狗介绍五、MODBUS-TCP基础知识TCP/IP协议基础TCP(传输控制协议)面向连接的、可靠的传输层协议IP(网际协议)负责将数据从源主机传输到目标主机的网络层协议端口TCP/IP协议中标识应用程序的逻辑地址Modbus TCP/IP默认使用端口502套接字IP地址和端口号的组合用于唯一标识网络中的应用程序字节基础与数据表示位计算机中最小的信息单位取值为0或1字节8位组成一个字节范围0-2550x00-0xFF字16位组成一个字范围0-655350x0000-0xFFFF高低字节与字节序在Modbus协议中数据通常以16位字为单位传输高字节16位数据中的前8位高位低字节16位数据中的后8位低位例如对于数值0x1234高字节是0x12低字节是0x34字节序指的是多字节数据在内存中的存储顺序大端序高字节在前低字节在后Modbus协议使用小端序低字节在前高字节在后大多数x86架构CPU使用寄存器类型与功能Modbus协议定义了四种不同类型的寄存器每种寄存器都有特定的用途和地址范围。可以简单理解为四种不同的数据存储区域用于不同类型的信息交换。寄存器类型总览以下是四种寄存器类型的对比寄存器类型标识前缀读写属性数据类型地址范围十进制实际应用场景线圈寄存器0x可读可写位布尔值00001-09999控制开关设备如继电器、阀门离散输入寄存器1x只读位布尔值10001-19999读取传感器状态如限位开关、报警信号输入寄存器3x只读16位整数30001-39999采集模拟量数据如温度、压力保持寄存器4x可读可写16位整数40001-49999存储配置参数如设定值、运行模式注表中的标识前缀是行业内常用的简写方式用于快速区分寄存器类型。例如0x代表线圈寄存器1x代表离散输入寄存器以此类推。线圈寄存器功能相当于设备的开关用于控制各种开关设备。特点可读可写每个线圈只存储一个位0或1。地址范围00001-09999对应偏移量0-9998。实际例子地址00001控制加热器的开关0关闭, 1开启地址00002控制风扇的启停0停止, 1运行常用操作使用功能码05写单个线圈或15写多个线圈来控制设备。离散输入寄存器功能相当于设备的状态指示灯用于监控各种传感器的状态。特点只读每个寄存器只存储一个位0或1。地址范围10001-19999对应偏移量0-9998。实际例子地址10001温度传感器的报警状态0正常, 1超温地址10002门禁开关的状态0关闭, 1打开常用操作使用功能码02读离散输入来获取传感器状态。输入寄存器功能相当于设备的传感器数据采集器用于存储从传感器读取的模拟量数据。特点只读每个寄存器存储一个16位整数范围0-65535。地址范围30001-39999对应偏移量0-9998。实际例子地址30001当前温度值例如读取到250表示25.0℃地址30002湿度值例如读取到605表示60.5%RH常用操作使用功能码04读输入寄存器来采集传感器数据。保持寄存器功能相当于设备的配置参数存储器用于存储和修改设备的设置参数。特点可读可写每个寄存器存储一个16位整数范围0-65535。地址范围40001-49999对应偏移量0-9998。实际例子地址40001温度设定点例如设置为300表示30.0℃地址40002系统运行模式0手动模式, 1自动模式常用操作使用功能码03读保持寄存器或06写单个保持寄存器来读写参数。通信帧结构Modbus TCP/IP帧格式Modbus TCP/IP通信帧基于TCP协议由以下部分组成字段长度(字节)描述事务处理标识符2唯一标识每个Modbus请求/响应事务协议标识符20x0000表示Modbus协议长度字段2后续字节的数量单位标识符功能码数据域单位标识符1用于标识在一个TCP连接上的不同Modbus从站相当于RTU的地址域功能码域1指定要执行的操作如03(读保持寄存器)、06(写单个寄存器)数据域可变包含请求或响应的数据长度取决于功能码和具体操作常用功能码详解读操作功能码功能码01读线圈寄存器功能读取线圈寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x011字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1数据2…数据n2字节0x00003n1字节0x011字节1字节1字节…1字节示例读取从站地址1的线圈寄存器起始地址0x0000读取2个请求帧00 01 00 00 00 06 01 01 00 00 00 02响应帧假设值为0x01, 0x0000 01 00 00 00 04 01 01 01 01功能码02读离散输入寄存器功能读取离散输入寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x021字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1数据2…数据n2字节0x00003n1字节0x021字节1字节1字节…1字节示例读取从站地址1的离散输入寄存器起始地址0x0000读取2个请求帧00 01 00 00 00 06 01 02 00 00 00 02响应帧假设值为0x01, 0x0000 01 00 00 00 04 01 02 01 01功能码03读保持寄存器功能读取保持寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x031字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000032n1字节0x031字节1字节1字节…1字节1字节示例读取从站地址1的保持寄存器起始地址0x0000读取1个请求帧00 01 00 00 00 06 01 03 00 00 00 01响应帧假设寄存器值为0x123400 01 00 00 00 05 01 03 02 12 34功能码04读输入寄存器功能读取输入寄存器的当前值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x041字节1字节1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000032n1字节0x041字节1字节1字节…1字节1字节示例读取从站地址1的输入寄存器起始地址0x0000读取1个请求帧00 01 00 00 00 06 01 04 00 00 00 01响应帧假设寄存器值为0x250000 01 00 00 00 05 01 04 02 25 00写操作功能码功能码05写单个线圈功能设置单个线圈寄存器的值0或1请求帧格式事务处理ID协议ID长度单位ID功能码线圈地址高字节线圈地址低字节值高字节值低字节2字节0x000061字节0x051字节1字节0x000x00/0xFF注值为0x0000表示关闭线圈0xFF00表示打开线圈响应帧格式与请求帧相同示例设置从站地址1的线圈寄存器地址0x0000为1请求帧00 01 00 00 00 06 01 05 00 00 FF 00响应帧00 01 00 00 00 06 01 05 00 00 FF 00功能码06写单个保持寄存器功能设置单个保持寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码寄存器地址高字节寄存器地址低字节数据高字节数据低字节2字节0x000061字节0x061字节1字节1字节1字节响应帧格式与请求帧相同示例设置从站地址1的保持寄存器地址0x0000值为0x1234请求帧00 01 00 00 00 06 01 06 00 00 12 34响应帧00 01 00 00 00 06 01 06 00 00 12 34功能码0F写多个线圈功能设置多个线圈寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节字节数数据1数据2…数据n2字节0x00007n1字节0x0F1字节1字节1字节1字节1字节1字节1字节…1字节响应帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x0F1字节1字节1字节1字节示例设置从站地址1的线圈寄存器起始地址0x0000设置4个值为0x05二进制0101请求帧00 01 00 00 00 08 01 0F 00 00 00 04 01 05响应帧00 01 00 00 00 06 01 0F 00 00 00 04功能码100x10写多个保持寄存器功能设置多个保持寄存器的值请求帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节字节数数据1高字节数据1低字节…数据n高字节数据n低字节2字节0x000072n1字节0x101字节1字节1字节1字节1字节1字节1字节…1字节1字节响应帧格式事务处理ID协议ID长度单位ID功能码起始地址高字节起始地址低字节数量高字节数量低字节2字节0x000061字节0x101字节1字节1字节1字节示例设置从站地址1的保持寄存器起始地址0x0000设置2个值为0x1234和0x5678请求帧00 01 00 00 00 0B 01 10 00 00 00 02 04 12 34 56 78响应帧00 01 00 00 00 06 01 10 00 00 00 02错误响应处理常见的错误响应包括功能码不支持从站返回功能码0x80地址无效返回错误码0x02数据无效返回错误码0x03连接超时主站未在规定时间内建立TCP连接响应超时主站未在规定时间内收到响应