单片机学习小组
直播中

万航渡路

9年用户 1409经验值
擅长:电源/新能源
私信 关注

UART通路配置参数定义的路径是怎样的?

UART通路配置参数定义的路径是怎样的?

回帖(1)

王竹

2022-2-14 10:28:25
型号
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 的定义:


32769
...
16
...
1
...
211


数据上行 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

[tr]第一部分[/tr]

打印名称消息流动方向描述
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数据包的个数
举报

更多回帖

发帖
×
20
完善资料,
赚取积分