149 lines
6.8 KiB
Markdown
149 lines
6.8 KiB
Markdown
# 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](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/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 速查
|
||
|
||
```c
|
||
// 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](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-15-1-Acontis%20EtherCAT主站开发案例.pdf) |
|
||
| **IgH EtherCAT** | [2-15-2-IgH EtherCAT主站开发案例.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-15-2-IgH%20EtherCAT主站开发案例.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` 是很好的调试入口:
|
||
|
||
```bash
|
||
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](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/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](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/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](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-8-视频开发案例.pdf) |
|
||
| **视频 Demo** | [Demo\platform-demos\](../TL3568-EVM(Buildroot-2018.02)_V1.8/4-软件资料/Demo/platform-demos/) (GStreamer、V4L2、RTSP) |
|
||
| **三屏异显** | [2-7-三屏同显、异屏方案演示.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-7-三屏同显、异屏方案演示.pdf) |
|
||
|
||
---
|
||
|
||
## 五、其他中间件
|
||
|
||
| 技术 | 资料 | 适用场景 |
|
||
|------|------|------|
|
||
| **Docker** | [2-10-Docker容器部署方法说明.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-10-Docker容器部署方法说明.pdf) + [Linux\Filesystem\docker\](../TL3568-EVM(Buildroot-2018.02)_V1.8/Linux/Filesystem/docker/) | 用容器隔离 CAN 协议栈和 Web 界面 |
|
||
| **PTP 时钟同步** | [2-17-基于PTP的时钟同步测试手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-17-基于PTP的时钟同步测试手册.pdf) | 多节点 CAN 数据时间戳对齐 |
|
||
| **5G 通信** | [2-6-PCIe 5G通信测试手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-6-PCIe%205G通信测试手册.pdf) | CAN 数据上5G |
|
||
| **SQLite** | [2-2-Linux应用开发手册.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-2-Linux应用开发手册.pdf) (SQLite章) | CAN 报文本地存储、离线分析 |
|
||
| **GDB 调试** | [2-18-GDB程序调试方法说明.pdf](../TL3568-EVM(Buildroot-2018.02)_V1.8/3-用户手册/2-18-GDB程序调试方法说明.pdf) | 远程 GDB Server 调试 |
|
||
|
||
---
|
||
|
||
## 六、你的 CAN 协议栈推荐集成的关键依赖
|
||
|
||
```
|
||
┌──────────────────────────────────────────┐
|
||
│ tinyxml2 (已定) → XML 配置解析 │
|
||
│ libsocketcan → SocketCAN C API │
|
||
│ libpthread → 多线程(收发分离) │
|
||
│ libsqlite3 (可选) → 本地报文记录 │
|
||
│ libmosquitto (可选) → MQTT 上报 │
|
||
└──────────────────────────────────────────┘
|
||
```
|