MDC300F UART 下发配置 日志调试

本文档详细介绍了MDC300F设备在101版本下UART通信的配置和调试过程,包括SOME/IP定义、参数配置、新建UART工程、数据收发以及日志调试等步骤。通过配置波特率、帧头和数据长度,实现与MDC的数据交互,并通过MDS和命令行工具进行调试和日志分析,以确保UART通信的稳定性和效率。
摘要由CSDN通过智能技术生成

型号

MDC300F, 刷的新的101版本, 操作系统是Ubuntu18. 除了Debug口, 有一路RS232的UART可以用, 不仅仅用于授时.

SOME/IP定义

mdc_uart_abstract_application.arxml 中定义的UDP端口号 54865(host, mcu的为51361).

uart_rx_service_interface.arxml有 SOME/IP 的定义:

<EVENT-ID>32769</EVENT-ID>
...
<EVENT-GROUP-ID>16</EVENT-GROUP-ID>
...
<METHOD-ID>1</METHOD-ID>
...
<SERVICE-INTERFACE-ID>211</SERVICE-INTERFACE-ID>

数据上行 SOME/IP Event 定义

  • EventID:0x8001
  • ServiceID:0xd3
  • InstanceID:1
  • EventGroupID:0x10

数据下行 SOME/IP Method 定义

  • MethodID:0x0001
  • ServiceID:0xd3
  • InstanceID:1

接收参数配置

UART通路配置参数定义 的路径: 产品文档 -> 接口说明 -> 数据透传 -> 通路配置说明 -> UART通路配置参数定义

假设我这里要给MDC发的UART数据如下:

  • 波特率115200bps
  • 帧头固定为 0x55, 0xAA
  • 剩余有效数据长度为5
  • 不要校验

本来是要写一下MMC的用法, 但是不晓得是MMC的问题, 还是MDS生成json出了错, 或者是我操作有问题, 总感觉101版本的生成的有bug, 特别是SyncData参数, 明明写的是uint8类型, 生成的json文件却是十六进制的string, 让人很无奈, 索性不走这条路了. 直接拷贝原有模版文件修改

# 如果是外面编写好的json文件上传到 /home/sftpuser/uploads/ 目录
# 如果传不了, 可能是文件的执行权限不够, 用chmod命令加权限

# 切换到配置文件目录
$ cd /opt/platform/mdc_platform/runtime_service/devmc/conf/
# 备份原有uart配置文件
$ cp mcu_uartbus_config.json mcu_uartbus_config.json.bak
# 拷贝模版文件修改
$ cp mcu_uartbus_config_m39.json mcu_uartbus_config.json
$ vi mcu_uartbus_config.json

# 主要修改如下

# 波特率是115200, 保持不变
{
  "key": "BaudRate",
  "value": {
    "uint32": 115200
  },
  "checksum": 4213107651
},

# SyncData中的value修改为 85(0x55) 和 170(0xAA)
{
  "key": "SyncData",
  "value": {
    "object[]": [
      {
        "key": "object",
        "value": {
          "uint8": 85
        },
        "checksum": 1360879489
      },
      {
        "key": "object",
        "value": {
          "uint8": 170
        },
        "checksum": 264756932
      }
    ]
  },
  "checksum": 572302646
}

# HeadFixLength 由原来的2修改为0
"key": "HeadFixLength",
"value": {
  "uint8": 0
},

# DataFixLength 修改为 "uint8": 5
{
  "key": "DataFixLength",
  "value": {
    "uint8": 5
  },
  "checksum": 1103247409
}

# 去掉校验 "uint8": 0
{
  "key": "ChecksumSignalLengthSize",
  "value": {
    "uint8": 0
  },
  "checksum": 1103247409
},
                                
# 下发uart配置到MCU
$ mdc-tool devm set-dev-cfg 0
# 复位MCU使配置生效
$ mdc-tool mcu reset mcu

新建UART工程

参考GPIO篇用MDS新建tk_uart工程, 导入官方的 uart_sample. 文件树为

$ tree
.
├── cmake
│   └── toolchain.cmake
├── CMakeLists.txt
├── manifest
│   ├── application_sample
│   │   └── uart_sample
│   │       └── mdc_uart_abstract_application.arxml
│   └── common
│       ├── data_type
│       │   ├── mdc_data_type.arxml
│       │   └── mdc_mode_declaration.arxml
│       ├── machine
│       │   ├── dmini0_machine.arxml
│       │   ├── dmini1_machine.arxml
│       │   ├── dmini2_machine.arxml
│       │   ├── dmini3_machine.arxml
│       │   └── host_machine.arxml
│       └── service_interface
│           └── canfd_can_uart_gpio_sample
│               └── uart_rx_service_interface.arxml
└── modules
    ├── CMakeLists.txt
    └── uart_sample
        ├── CMakeLists.txt
        └── src
            ├── main.cpp
            ├── uart.cpp
            └── uart.h

12 directories, 16 files

依次点击 Generate, Reload Cmake, Build 按钮, 点齿轮图标配置如下

在这里插入图片描述

点击Launch按钮运行

MDC发出的数据

115200波特率, 打开串口, HEX显示, 500ms发出一帧, 每帧发出69字节数据

在这里插入图片描述

发送数据到MDC

发送框输入 55 AA 01 02 03 04 05, 勾选HEX发送, 定时发送, 100ms/次

在这里插入图片描述

可以在MDS的窗口中间隔大约100ms收到7字节数据:

在这里插入图片描述

命令行运行

命令行运行可以参照MDS运行时Console最上面的提示

$ export CM_CONFIG_FILE_PATH=/home/mdc/wks/tk_uart/etc/HostMachine/mdcuart/MdcUartProcess
$ /home/mdc/wks/tk_uart/bin/uart_sample

程序调用关系

在这里插入图片描述

日志调试

程序中开的有log, 可以查看MDC收发UART数据的log

# 删除掉之前的日志
$ rm -f /opt/log/host/platform_log/debug/MCU*

# 设置日志级别
# 日志总开关
# $ mdc-tool log-control level debug

# 设置MCU日志级别
$ mdc-tool mcu setloglevel debug

# https://bbs.huaweicloud.com/forum/thread-147089-1-1.html
# https://bbs.huaweicloud.com/forum/thread-146888-1-1.html 
$ mdc-tool log-control appid MCU ctxid MCU level info

# 查看日志, 5s更新一次
# 串口助手发送数据给MDC
$ mdc-tool log-convert continue datatime /opt/log/host/platform_log/debug/MCU*.log  | grep -i uGetMsg

2019/04/20 08:36:20.371737830 007 MCU MCU info [A I N 2019-4-20 0:36:20.349 cdd_datacen 26 uGetMsg:113443,PkgFrqHz:9]
2019/04/20 08:36:25.382858440 098 MCU MCU info [A I N 2019-4-20 0:36:25.359 cdd_datacen 26 uGetMsg:113765,PkgFrqHz:10]
2019/04/20 08:36:30.392578490 189 MCU MCU info [A I N 2019-4-20 0:36:30.369 cdd_datacen 26 uGetMsg:114087,PkgFrqHz:9]
2019/04/20 08:36:35.402783650 024 MCU MCU info [A I N 2019-4-20 0:36:35.379 cdd_datacen 26 uGetMsg:114402,PkgFrqHz:9]
...

# 可以看到 uGetMsg 的数据在增加, 频率大概9~10Hz

参考 【MDC300F】UART调试定位之MCU日志查看及分析_MDC智能驾驶计算平台_华为云论坛 (huaweicloud.com) UART相关的日志字段说明

第一部分
打印名称消息流动方向描述
uCfghost-mcu描述了UART配置下发的次数,无论成功与失败
uCfgPasshost-mcu描述了UART配置下发,其中通过校验的次数
uCfgTimehost-mcu描述了最后一次UART成功下发的次数
uGetMsguart-mcu描述了UART传输给MCU的UART报文(1Byte)的个数
PkgFrqHzhost-mcu描述了UART传输给MCU的数据包的速率,单位为个/秒,一个数据包包括多个Byte,长度不定
uPkgSuart-mcu描述了UART传输给MCU的数据包的个数(通过同步头)
RSIPpmcu-host描述了MCU传输给SomeIP的成功的数据包的个数
RSIPfmcu-host描述了MCU传输给SomeIP的失败的数据包的个数
uSIPReqhost-mcu描述了HOST传输给MCU的请求的个数
upmcu-uart描述了MCU传输给UART成功的数据包的个数
ufmcu-uart描述了MCU传输给UART失败的数据包的个数
uPkgLgtErruart-mcu描述了UART传送给MCU的数据包,长度错误的数据包的个数
uCtCurMsuart-ram-mcu描述了UART将数据存在buffer中,MCU连续两次从buffer中获取数据的时间间隔,单位为毫秒
uCtMinMsuart-ram-mcu描述了一段时间内,MCU连续两次从buffer中获取数据的最小时间间隔,单位为毫秒
uCtMaxMsuart-ram-mcu描述了一段时间内,MCU连续两次从buffer中获取数据的最大时间间隔,单位为毫秒
第二部分
RSIPpmcu-host描述了MCU传输给SomeIP的成功的数据包的个数
RSIPfmcu-host描述了MCU传输给SomeIP的失败的数据包的个数
MDReqhost-mcu描述了HOST传输给MCU的Method数据包的个数
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值