6.8 KiB
6.8 KiB
04-应用层与中间件开发
资料源: TL3568-EVM[3-用户手册](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/)\ (2-2/2-4/2-8/2-10/2-15/2-16/2-17) +
Demo\*
一、CAN 通信开发(你的核心需求)
1.1 资料位置
| 内容 | 路径 |
|---|---|
| 应用开发手册中的CAN章节 | 2-2-Linux应用开发手册.pdf |
| Rockchip CAN 驱动文档 | [6-开发参考资料\Rockchip官方参考文档\Common\CAN](../TL3568-EVM(Buildroot-2018.02)_V1.8/6-开发参考资料/Rockchip官方参考文档/Common/CAN/) (2 PDF) |
| CAN Demo (Linux) | [4-软件资料\Demo\base-demos\can_echo](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/can_echo/) |
| CAN Demo (AMP) | [4-软件资料\Demo\amp-demos\can_echo](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/amp-demos/can_echo/) |
1.2 API 速查
// socket
int s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
// 绑定到 can0
struct sockaddr_can addr = { .can_family = AF_CAN };
addr.can_ifindex = if_nametoindex("can0");
bind(s, (struct sockaddr*)&addr, sizeof(addr));
// 接收 (阻塞)
struct can_frame frame;
read(s, &frame, sizeof(frame));
// 发送
frame.can_id = 0x123; frame.can_dlc = 8;
frame.data[0] = 0xAA; // ... fill
write(s, &frame, sizeof(frame));
// 硬件过滤
struct can_filter f = { .can_id = 0x100, .can_mask = 0x700 };
setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &f, sizeof(f));
1.3 你的 CAN 协议栈与 Demo 的对接
创龙的 can_echo demo 提供了 原始 SocketCAN 收发骨架。你可以直接在此基础上替换为你设计的 XML 配置驱动协议栈:
can_echo 原有代码:
while(1) { recv(); send_echo(); }
改造后:
while(1) {
recv() → rx_msg 分发 → 写 signal addr
timer → tx_poll → 从 signal addr 读 → 组装 CAN 帧 → send()
mutation → tx_trigger → send()
}
二、EtherCAT 主站开发
2.1 资料位置
| 内容 | 路径 |
|---|---|
| Acontis EtherCAT | 2-15-1-Acontis EtherCAT主站开发案例.pdf |
| IgH EtherCAT | 2-15-2-IgH EtherCAT主站开发案例.pdf |
| IgH Demo | [Demo\base-demos\igh_ethercat_dc_motor](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/igh_ethercat_dc_motor/) |
| Acontis Demo | [Demo\base-demos\EcMasterDemoDcMotor](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/EcMasterDemoDcMotor/) |
2.2 选型对比
| IgH EtherCAT | Acontis EC-Master | |
|---|---|---|
| 协议栈 | 开源 GPL | 商业授权(创龙板随附试用许可) |
| 实时性 | 依赖 Preempt-RT 内核 | 专业实时层优化 |
| 学习曲线 | 陡(需读源码) | 中(文档齐全) |
| 适合 | 学习、个人项目 | 商业项目 |
学习建议:先用 IgH 跑通一个伺服电机,理解 EtherCAT 主站的 SII/PDO/SDO/DC (分布式时钟) 概念。IgH 的命令行工具 ethercat 是很好的调试入口:
ethercat slaves # 扫描从站
ethercat cstruct # 查看 PDO 映射
ethercat upload -p0 0x1000 0x00 # 读 SDO
三、网络与物联网(TCP/UDP / MQTT)
3.1 资料位置
| 内容 | 路径 |
|---|---|
| TCP/UDP 基础 | [Demo\base-demos\tcp_udp](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/base-demos/tcp_udp/) |
| MQTT 协议 | [Demo\mqtt-demos\mqtt_client](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/mqtt-demos/mqtt_client/) + [mqtt_sinewave_pub](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/mqtt-demos/mqtt_sinewave_pub/) |
| MQTT 手册 | 2-16-MQTT通信协议案例.pdf |
3.2 你的 CAN 协议栈 + MQTT
一个常见的工业物联网架构:
RK3568 CAN → 协议栈解析 → 数据转为 JSON → MQTT 发布到云端
← 云端 MQTT 下发命令 ← CAN 发送到 ECU
MQTT Demo 中的 mqtt_sinewave_pub 就是一个"定时采集数据→MQTT发布"的模板。
四、Qt 图形界面 / 多媒体
| 内容 | 路径 |
|---|---|
| Qt 开发手册 | 2-4-Qt工程编译说明、GPU核心使用说明.pdf |
| Qt Demo | [Demo\qt-demos](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/qt-demos/) (LED控制、图片显示、多屏) |
| 视频开发 | 2-8-视频开发案例.pdf |
| 视频 Demo | [Demo\platform-demos](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/platform-demos/) (GStreamer、V4L2、RTSP) |
| 三屏异显 | 2-7-三屏同显、异屏方案演示.pdf |
五、其他中间件
| 技术 | 资料 | 适用场景 |
|---|---|---|
| Docker | 2-10-Docker容器部署方法说明.pdf + [Linux\Filesystem\docker](../TL3568-EVM(Buildroot-2018.02)_V1.8/Linux/Filesystem/docker/) | 用容器隔离 CAN 协议栈和 Web 界面 |
| PTP 时钟同步 | 2-17-基于PTP的时钟同步测试手册.pdf | 多节点 CAN 数据时间戳对齐 |
| 5G 通信 | 2-6-PCIe 5G通信测试手册.pdf | CAN 数据上5G |
| SQLite | 2-2-Linux应用开发手册.pdf (SQLite章) | CAN 报文本地存储、离线分析 |
| GDB 调试 | 2-18-GDB程序调试方法说明.pdf | 远程 GDB Server 调试 |
六、你的 CAN 协议栈推荐集成的关键依赖
┌──────────────────────────────────────────┐
│ tinyxml2 (已定) → XML 配置解析 │
│ libsocketcan → SocketCAN C API │
│ libpthread → 多线程(收发分离) │
│ libsqlite3 (可选) → 本地报文记录 │
│ libmosquitto (可选) → MQTT 上报 │
└──────────────────────────────────────────┘