RK3506控制DSL200Summary

发布时间:2026/8/27 17:59:29

RK3506控制DSL200Summary
1.TCP/UDP通信部分TCP通信流程A 和 B 之间先建立一条稳定连接然后再传输数据。服务端创建 Socket (socket)准备一部“电话机”。绑定地址 (bind)给电话机分配一个固定的电话号码IP 地址和端口号以便客户端知道该打给谁。监听端口 (listen)接通电话线让电话处于“可以接听”的状态进入LISTEN状态。接受连接 (accept)阻塞等待原地待命。当客户端拨打电话并发起三次握手时服务端完成握手。关键点握手成功后服务端会为这个客户端生成一个全新的、专属的 Socket用于后续的数据传输而最初的那个 Socket 继续保持监听等待下一个客户。数据交互 (recv/send)通过专属 Socket 与客户端进行全双工双向的数据收发。关闭连接 (close)通信结束参与四次挥手回收系统资源。客户端创建 Socket (socket)准备一部“电话机”。(通常不需要手动绑定bind操作系统会随机分配一个本地端口)。.发起连接 (connect)拨打服务端的电话号码IP 和端口主动发送SYN报文触发三次握手。数据交互 (send/recv)连接建立ESTABLISHED状态后像读写本地文件一样向服务端发送请求并接收响应。关闭连接 (close)数据发完后主动发送FIN报文发起四次挥手断开连接。UDP通信流程UDP 的流程非常轻量没有连接建立和断开的过程服务端和客户端处于更加“平等”的数据收发状态。服务端创建 Socket (socket)准备一个“公共邮箱”。绑定地址 (bind)将邮箱设立在一个公开的地址IP 和端口号告诉所有人信件寄到这里。接收数据 (recvfrom)随时查看邮箱。收到客户端发来的数据报时不仅提取数据还会同时记录下发件人客户端的 IP 和端口。发送数据 (sendto)如果需要回复服务端会根据刚才记录下来的客户端地址直接将回信寄出。客户端创建 Socket (socket)准备信件和邮筒。发送数据 (sendto)只要知道服务端的 IP 和端口直接把数据打包发送出去。它不会管服务端是不是开机、是不是在监听发出去就不管了。接收数据 (recvfrom)如果业务逻辑需要服务端的响应就在这里等待接收回信。TCP和UDP核心区别对比项TCPUDP是否需要连接需要连接不需要连接socket 类型SOCK_STREAMSOCK_DGRAM服务端流程socket → bind → listen → accept → recv/sendsocket → bind → recvfrom/sendto客户端流程socket → connect → send/recvsocket → sendto/recvfrom数据形式字节流数据报是否保证到达保证丢了会重传不保证丢了就丢了是否保证顺序保证顺序不保证顺序是否可能粘包/拆包会需要自己处理包边界一次sendto对应一个 UDP 数据报速度和延迟稳定可靠但机制更重更轻量延迟低适合场景文件传输、控制命令、可靠通信丢包测试、视频流、实时数据、广播、多播在应用层编程层面除了通信流程不同更大的不同还在于数据格式不同UDP的数据格式是数据报一次sendto对应的就是一个UDP数据报所以不会存在粘包/拆包的情况而TCP的数据格式是字节流并不是分好的一个个包所以需要字节处理包边界防止粘包的情况。解决方案static ssize_t readn(int fd, void *buf, size_t len) { size_t left len; char *ptr (char *)buf; while (left 0) { ssize_t n recv(fd, ptr, left, 0); if (n 0) { if (errno EINTR) { continue; } return -1; } if (n 0) { return len - left; } left - n; ptr n; } return len; }代码意思是我要读 len 个字节。如果一次 recv 没读够就继续 recv。直到累计读够 len 个字节才返回成功。假设一个包是 52 字节。第一次调用left 52; ptr buf;第一次recv()只收到 20 字节n 20; left 52 - 20 32; ptr ptr 20;这时缓冲区里已经有前 20 字节了但还不完整所以继续循环。第二次recv()收到 10 字节n 10; left 32 - 10 22; ptr ptr 10;现在累计收到 30 字节还差 22 字节。第三次recv()收到 22 字节n 22; left 22 - 22 0;left 0说明已经读满 52 字节。函数返回return len;也就是返回 52。这时候外层代码才开始解析Packet。2. RK3506控制DSL200部分RK3506-USB转RS485-DSL2002.1 为什么要使用USB-RS485而不直接控制DSL200物理电平与信号类型的根本不匹配RK3506 (SoC侧)芯片直接输出的串口信号是 TTL 电平通常是 1.8V 或 3.3V 的单端信号。这种信号非常微弱只适合在同一块电路板上进行几厘米内的短距离通信。DSL200伺服 (设备侧)工业设备使用的是 RS485 电平标准。它不使用共地单根线传数据而是通过两根线A和B之间的电压差来表示逻辑 0 和 1。2.2 USB-RS485在RK3506的表达在RK3506以及绝大多数运行Linux系统的嵌入式板卡上接入USB转RS485模块后系统在底层会将其识别为USB设备但在应用层它会映射为一个串口TTY设备节点。由于RS485只是物理层的电平标准USB转RS485模块的内部核心其实是一颗“USB转UART串口”的芯片如CH340/CH341、CP2102、FT232等外加一个RS485的收发器PHY。因此Linux内核并不知道外部接的是RS485它只会把它当成普通的USB转串口来处理。应用层的表现形态/dev/ttyUSB*在你的应用程序中直接把它当作普通的串口如/dev/ttyUSB0进行打开、配置波特率和读写即可。2.3 Modbus RTU 一帧数据一般由哪些部分组成一般包括从站地址、功能码、寄存器地址、数据内容、CRC16 校验。比如写单个寄存器时功能码是0x06读保持寄存器时功能码是0x03。2.4 为什么 Modbus RTU 要加 CRC16因为 RS485 是工业现场常用总线可能存在电磁干扰、线缆接触不良、传输错误等问题。CRC16 用于判断接收到的数据帧是否被破坏。如果 CRC 不一致说明数据不可信程序就不能继续使用这帧数据。2.5 B_TCP开机自启是怎么做的可以用 systemd 服务实现。把B_TCP编译后放到固定路径比如/usr/local/bin/B_TCP然后写一个.service文件。3.问题排查部分3.1 如果开机后 A 端连接 B 端失败你怎么排查在我的实际过程中确实遇到过这个问题问题的大部分的原因是我的B板的TCP接收转发端的进程还没起来A端就开始发送数据了导致客户端服务端通信失败。理论上排查过程可以分为1.在B端检查自启服务有没有启动2.使用 ip addr查看ip是否正确查看AB端ip是否在同一个网段3.ping一下等3.2 电机不转怎么排查1.首先插拔一下USB-RS485模块检查一下有没有在 /dev下生成tty节点然后我会重新检查一下波特率。2.排除上述原因我会查看一下dsl200的status状态读取一下速度和模式以及警告码Alarm code对照用户手册查看一下问题。3.我还会测试一下是只有位置模式下有问题还是速度模式和位置模式下都有问题。4.BMI088驱动4.1.字符设备注册流程1.申请设备号 2.初始化字符设备并绑定file_operations 3.创建设备类 4.创建设备节点4.2 IIO注册流程分配 IIO 设备使用devm_iio_device_alloc分配一个 IIO 结构体实例附带分配私有数据空间iio_priv。填充 IIO 信息主要是设置回调函数类似file_operations)与设置channelsinfo结构体提供底层数据读取回调最核心的是read_raw函数。channels数组定义传感器有几个轴、什么类型如IIO_ANGL_VEL表示角速度、是否需要比例因子Scale等。modes设置为INDIO_DIRECT_MODE直接读取模式。注册 IIO 设备使用devm_iio_device_register向内核注册。4.2 BMI088通过SPI读取寄存器的流程是什么主机先发送一个寄存器地址并把最高位置 1 表示读操作。由因为SPI是全双工的所以后续读数据也需要主机一直向从机发一些无效数据产生时钟。4.3BMI088 陀螺仪初始化流程是什么配置 SPI 参数比如 mode、bits_per_word、max_speed_hz。向 soft reset 寄存器写入0xB6让芯片复位。延时等待芯片内部状态恢复。读取 CHIP ID判断是否等于0x0F测试SPI通信是否成功。配置陀螺仪量程比如 ±2000 dps。设置带宽比如2000HZ。注册字符设备或 IIO 设备。4.3.问题排查1.SPI通讯失败阶段1软件排查在接上BMI088模块后导入bmi088_gyro.ko驱动模块发现SPI通讯失败1.首先排查接线是否正确其次排查PS是否接地BMI088在SPI模式下要求PS接地发现购买的BMI088模块是开关模式开关已经打到SPI2.排除上述原因后我们取下BMI088短接开发板上MSIO和MISO引脚排查是BMI088模块的问题还是开发板的问题短接MOSI和MISO后依然SPI通讯失败那问题大概率就在开发板上大概率是设备树有问题3.查看设备树发现已设置引脚复用查看pinctrl子系统下的引脚cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins发现SPI0对应的pin口为 pin15pin16pin17pin18pin19对应的GPIO为GPIOB7,GPIOC0,GPIOC1,GPIOC2,GPIOC3然后我们查看原理图可以看到原理图中的SPI几个接口是GPIOB0-B3即接口对应错误。然后我们查看SDK中的设备树可以发现设备树的配置的确是GPIOC xx与原理图中的不同。然后我们按照原理图修改SPI 的pinctrl的引脚修改后查看发现pin789居然不是spi而是uart2说明这个引脚目前是被uart2占用了然后我们在设备树中将uart2的status设为disabled发现pin7-10变成spi了。这时我们以为应该可以了然后连接模块进行实验发现依然报错。阶段2示波器排查所以由此我们现在依然怀疑是开发板SPI输出有问题我们撰写一个持续发送消息的demo然后使用示波器查看CLK,MOSI,MISO波形。通过抓取CLK波形来看CLK无波形那么说明要么设备树依然有问题要么SPI控制器等坏掉了。阶段3继续排查设备树继续排查设备树我们发现编译设备树时除了rk3506-pinctrl.dtsi文件外还有一个rk3506-pinctrl-rmio.dtsi文件然后我们查看原理图发现的确是存在IO重映射机制然后观察rk3506-pinctrl-rmio.dtsi文件文件将所有引脚的重映射功能全部描述出来了如图哪怕GPIOA_0……并没有SPI功能他也描述出来了如果不理解可以打开一下这个文件然后输入 /spi0一直按n会发现有几百个spi的复用实则里面只有几个是我们需要的。最后我们修改板级设备树里面的io9io9io10根据原理图实际情况来就是GPIOB1,GPIOB2等。修改完设备树我们重新编译烧录运行cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins可以发现正确的引脚情况了。最后无论是示波器显示还是短接回环还是BMI088模块都没问题了。

相关新闻

AI视频增强工具部署与实战:从环境配置到老视频修复全流程

AI视频增强工具部署与实战:从环境配置到老视频修复全流程

2026/8/27 17:58:22

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个名为“Dance”的项目。从标题“在网盘里发现了六年前跳舞的我!”来看,这很可能是一个与视频处…

2026 年最值得关注的千问 Qwen 大模型版本盘点

2026 年最值得关注的千问 Qwen 大模型版本盘点

2026/8/26 20:02:57

2026 年最值得关注的千问 Qwen 大模型版本盘点 大语言模型迭代速度惊人,尤其是阿里云推出的千问(Qwen)系列,凭借强大的推理能力和多模态支持,已成为开发者和企业的首选。截至 2026 年中,Qwen 已全面进化为“…

Python并发编程实战:多线程vs多进程性能对比,一篇文章让你彻底选对方案

Python并发编程实战:多线程vs多进程性能对比,一篇文章让你彻底选对方案

2026/8/25 19:51:02

引言 在Python开发中,当我们需要同时处理多个任务时,常常会面临一个经典的选择:使用多线程还是多进程?由于全局解释器锁(GIL)的存在,Python的多线程并不能真正利用多核CPU实现并行计算&#xf…

优化 | 5分钟读懂LLM:DeepSeek、ChatGPT背后的核心技术,零基础小白收藏这一篇就够了!!

优化 | 5分钟读懂LLM:DeepSeek、ChatGPT背后的核心技术,零基础小白收藏这一篇就够了!!

2026/8/27 17:58:16

前言 LLM(Large Language Model)是大型语言模型的简称,像DeepSeek、ChatGPT等都属于不同公司开发的LLM。你可以把它想象成一个超级聪明的聊天机器人和写作助手,它通过学习了海量文字资料,变得非常擅长理解和生成人类语…

基于SpringBoot的膳食搭配营养学知识智能问答小程序的实现毕业设计项目源码

基于SpringBoot的膳食搭配营养学知识智能问答小程序的实现毕业设计项目源码

2026/8/27 17:58:16

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

这样图解Transformer应该没人看不懂了吧——Transformer工作原理

这样图解Transformer应该没人看不懂了吧——Transformer工作原理

2026/8/27 17:58:16

前言 本文将深入剖析Transformer的内部工作原理,详细研究其运作细节。 我们将通过实际的矩阵表示和形状,观察数据如何在系统中流动,并理解每个阶段进行的计算。 本文目标不仅是理解Transformer是如何工作的,更要探究它为何如此…

本地部署DeepSeek R1 + Ollama + XRAG:三步搭建RAG系统,并解锁全流自动化评测

本地部署DeepSeek R1 + Ollama + XRAG:三步搭建RAG系统,并解锁全流自动化评测

2026/8/27 17:58:16

引言 如何科学的评估RAG系统,对于RAG系统的性能优化至关重要。为此,本文提供了一个详细操作指南,帮助用户使用Ollama本地部署最新的DeepSeek R1模型,并使用最新的XRAG1.0框架来构建RAG系统并评估你的本地RAG知识库系统。 这一过程…

RustDesk部署到linux(自建服务器)

RustDesk部署到linux(自建服务器)

2026/8/27 17:58:16

简介 ‌RustDesk‌是一款开源的远程桌面软件,由中国开发者开发,使用Rust编程语言构建。它支持跨平台运行,可以在Windows、macOS、Linux、iOS、Android和Web等多个平台上使用。RustDesk的主要功能包括远程桌面访问、文件传输、文本聊天等&…

程序员必藏:LLM无法逾越的五大理论天花板,为何“大力出奇迹“已到尽头?

程序员必藏:LLM无法逾越的五大理论天花板,为何“大力出奇迹“已到尽头?

2026/8/27 17:48:16

前言 “大力出奇迹”——这似乎已成为AI领域的黄金法则。从GPT-1的1.17亿参数到GPT-4的万亿级别,模型规模的指数级增长带来了惊人的能力涌现。我们似乎相信,只要数据够多、参数够大,一切问题都能被“暴力”解决。 然而,一篇由谷…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

2026/8/27 0:07:12

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

2026/8/27 0:07:12

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

2026/8/27 0:07:12

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…