mcu shell命令参考文档

mcu shell uart串口设置:波特率115200,8位数据位,1位停止位,无奇偶检验

登陆xcd mcu shell

💥 xcd mcu shell通过串口总共有3种登陆方式,3种方式彼此互斥,同时只能接一种硬件设备。

  • android系统通过adb/串口直接登陆到MCU
  • PC通过type c usb线登陆到MCU
  • PC通过debug板子登陆到MCU

android系统通过串口直接登陆到MCU

Android系统通过adb/串口登陆到mcu shell 步骤:

  1. 通过adb shell登陆到Android系统,或者通过soc串口登陆到Android

  2. 输入命令:

    1. stop mculog 停止mculog进程,因为mculog打开占用了串口/dev/ttyHS4,不停止会导致mcu shell无法输入,

      1. 8650平台执行 microcom /dev/ttyHS4,输入命令后连续输入两个回车就会出现mcu shell终端提示符:msh>#
      2. F3平台执行 microcom /dev/ttyXR6
    2. 如果mcu log比较多,无法看清楚输入的命令,可以直接复制命令:log.set.loglevel.current 0 粘贴到终端,然后输入回车,该命令可以设置mcu log等级为fatal级别。

    3. 如果mcu shell可以输入输出,但没有log,可能是因为soc启动后没有发送握手信号给mcu,可以输入命令:log.cat 就可以看到mcu的log了

这张图片展示了mcu shell的命令列表界面,对应mcu shell登录后的操作界面。界面中以COMMAND LIST的形式列出了可执行命令,包含help、cls、system.version等多个命令,每个命令右侧标注了对应的功能说明,比如system.version功能是获取mcu版本,system.dump.eventlogs功能是dump所有事件日志。该界面是用户输入命令、与mcu shell交互的操作入口,其中microcom命令用于登录mcu shell的相关操作和文档中描述的登录逻辑相匹配,也对应了文档中提及的查看mcu log时可能用到的命令相关场景。

microcom命令可以登陆到mcu shell,输入”CTRL+]” 可以退出mcu shell 回到 Android shell

PC通过type c usb线登陆到MCU(F3目前不支持)

P1及P1之后的硬件板子可用,P1之前的板子无法使用,输入有问题;

type-c出来的UART TTL电平必须是1.2V,其他电平都无法输入输出。

图片展示了PC通过Type-C USB线登陆到MCU的硬件连接情况。画面中,Type-C接口处有红色框标注,其连接着一根黑色线缆,线缆另一端有“UART”标识。背景为电路板,电路板上还有“CORE-P01-19”等标识。该图片与文档中“PC通过type c usb线登陆到MCU(F3目前不支持)”的内容相关,直观呈现了Type-C接口及连接线缆的硬件连接状态,辅助说明硬件连接方式。

PC通过debug板子登陆到MCU

XCD项目

下图方框1,使用type C线连接PC;方框2,连接板子的调试口。PC打开数值最小的COM口(不行每个都打开试下),即可输入shell命令(优先复制粘贴的方式输入)。注意debug板子的拨码开关和下图保持一致,杜邦线需要短接两个引脚。

这张图片展示了用于MCU调试的板子,图中红框标注了两个关键位置:左上角红框对应调试板子的拨码开关区域,文档中要求该开关需和此处保持一致;上方红框标注为“2”的排线,对应文档提及的方框2,该排线应连接miniwiggle或劳特巴赫设备。同时图中可见红色杜邦线短接了两个引脚,符合文档中要求的操作要点,整体是XCD项目调试所用的硬件连接实物图。

O801项目

使用如下debug板子,下图方框1接板子,方框2接miniwiggle/劳特巴赫,方框3接PC为MCU串口,一般第二个COM口为MCU串口(不行每个都打开试下)

图片展示了O801项目使用的debug板子,方框1处为USB接口,方框2处为杜邦线接口,方框3处为USB接口。该图片与文档中介绍O801项目PC通过debug板子登陆到MCU的内容相关,用于说明调试时各接口的连接位置,其中方框2处的杜邦线接口需短接两个引脚,与文档中提到的杜邦线连接方式相呼应。

系统

system.version

获取系统版本号

命令格式:system.version

该命令无参数,用于获取mcu系统git版本号和编译时间信息

system.reset

复位mcu系统

命令格式:system.reset

该命令参数说明:

0: mcu安全复位(等待SOC关机)+ SOC复位 + MCU复位,原则上非特殊情况不能使用

1: mcu重启(不等待SOC关机)+ SOC复位 + MCU复位,原则上非特殊情况不能使用

2: SOC安全重启(等待SOC关机)+ SOC复位(拉KPD) + MCU不复位

3: SOC非安全重启(不等待SOC关机)+ SOC复位(拉KPD) + MCU不复位

产线老化测试,建议使用 system.reset 1

os

os.dump.taskinfo

dump autosar指定task信息

log

log.set.loglevel.current

设置mcu log等级,该设置只会影响当前点火周期的log等级,不会保存配置,掉电后配置丢失。

命令格式:

$level_id

level_id:设置的log等级,取值为0,1,2,3,4。其分别代表:0:fatal 1:error 2:warnning 3:info 4:debug。

log.set.loglevel.saved

设置mcu log等级,该设置会影响当前点火周期的log等级,且配置会保持到nvm中,掉电重启后该配置还会生效。

命令格式:log.set.loglevel.saved $level_id

level_id:设置的log等级,取值为0,1,2,3,4。其分别代表:0:fatal 1:error 2:warnning 3:info 4:debug。

log.set.loglevel.saved 3

log.get.loglevel

获取当前mcu log 打印等级

命令格式:log.get.loglevel

该命令无参数。

log.get.loglevel

log.filter

log.filter.grep

命令格式:log.filter.grep $pattern

功能说明:根据指定匹配模式过滤日志

参数介绍:

pattern:匹配模式,支持任意字符”*”

例1:log.filter.grep ab,表示匹配包含”ab”字符的日志

例2:log.filter.grep a*b,表示匹配a b之间包含任意字符的日志

例3:log.filter.grep a*b*c,表示匹配a b包含任意字符且b c之间包含任意字符的日志

log.filter.stop

命令格式:log.filter.stop

功能说明:停止过滤

参数介绍:无参数

memory

memory.display.word

从指定的地址ram或rom读取一个字(4字节)的数据,给出的addr地址必须是4字节对齐

命令格式:memory.display.word $addr

addr: 从addr地址处读取数据

memory.display.bytes

从指定的地址ram或rom读取多个字节的数据

命令格式:memory.display.bytes $addr $length

addr: 从addr地址处读取数据

length:读取字节的长度

memory.write.word

往指定的ram地址写数据,给出的addr地址必须是4字节对齐

命令格式:memory.write.word $addr $value

addr: 指定需要写数据的地址

value:需要写入到addr地址的值

memory.write.byte

往指定的ram地址写1byte数据

命令格式:memory.write.byte $addr $value

addr: 指定需要写数据的地址

value:需要写入到addr地址的值

memory.valid.check

使用以上命令读写ram或rom时,都会检测addr地址的有效性,通过该命令可以关闭或打开地址有效性检测

命令格式:memory.valid.check $onoff

onoff: 有限性设置开关,0:关闭,非0:打开

gpio

dio.write.channel

设置dio channel输出高低电平

命令格式:dio.write.channel $chid $value

chid:channel id号

value:设置的值,0表示设置为低电平,非0表示设置为高电平

dio.read.channel

读取指定dio channel的电平

命令格式:dio.read.channel $chid

chid:channel id号

i2c

i2c.write.reg

往指定的i2c设备寄存器写值

命令格式:i2c.write.reg $bus $slaveaddr $regaddr $value

bus:i2c总线id号,默认从0开始
slaveaddr : i2c外设7bit slave addr
regaddr : i2c外设寄存器地址
value: 往寄存器写入的值

i2c.read.reg

往指定的i2c设备寄存器的值

命令格式:i2c.read.reg $bus $slaveaddr $regaddr

bus:i2c总线id号,默认从0开始
slaveaddr : i2c外设7bit slave addr
regaddr : i2c外设寄存器地址

i2c.read.reghub $regaddr

读取hub寄存器的值

命令格式:i2c.read.reghub $regaddr

regaddr : i2c外设寄存器地址,地址范围:0xBF800000→0xBF80FFFF;0xBFD20000→0xBFD2FFFF;

usb

usb.set.mode.current

设置usb hub 4715模式为host或device,该设置只会影响当前点火周期的usb模式,不会保存配置,掉电后配置丢失。

命令格式:usb.set.mode.current $mode

mode: 1:表示设置为host模式,即soc是host,通过hub4715 可以外接u盘等usb外设;

     0:表示设置为device1模式,即soc是device,可以连接到PC上,PC为host,PC通过adb 可以登陆到android

usb.set.mode.saved

设置usb hub 4715 模式为host或device,该设置会影响当前点火周期的usb模式,且配置会保持到nvm中,掉电重启后该配置还会生效。

命令格式:usb.set.mode.saved $mode

mode: 1:表示设置为host模式,即soc是host,通过hub4715 可以外接u盘等usb外设;

     0:表示设置为device模式,即soc是device,可以连接到PC上,PC为host,PC通过adb 可以登陆到android

注意:如果设置为host模式,且保持配置,无法通过adb登陆Android了,即使系统重启后也无法登陆。

usb.get.mode

获取usb hub 4715模式,返回device或host。

命令格式:usb.get.mode

该命令无参数。

power

pm.set.sleep.time

该命令可以设置系统从standby 进入sleep的时间,设置完成后,配置立即生效,且会保持配置到nvm中,掉电重启后该配置还会生效。

命令格式:pm.set.sleep.time $time

time:设置的时间参数,单位为秒,最小值为30s,最大值4294967295s,如果想系统永不休眠,可以设置为最大值。

pm.get.sleep.time

获取系统从standby 进入sleep的时间配置参数。

命令格式:pm.get.sleep.time

该命令无参数

pm.set.tec.config $enable

该命令可以使能或关闭TEC的功能。

命令格式:pm.set.tec.config $enable

enable:1:打开TEC,0:关闭TEC

pm.get.tec.config

该命令查询TEC的状态。

命令格式:pm.get.tec.config

该命令无参数

pm.set.tec.temp

该命令可以设置温度,以便于测试不同温度下的TEC策略;

命令格式:pm.set.tec.temp $temperature

temperature:具体的温度值,该值将影响TEC的策略

pm.get.tec.temp

该命令查询用户设置的影响TEC温控策略的温度;

命令格式:pm.get.tec.temp

该命令无参数

pm.charge.hv.ctrl

手工设置充电的高压开关,设置完成后立即生效,重启或休眠唤醒后配置失效;该命令配置后,电池充电可以不用发送上高压信号(HvBattModStsCoding_HV_On)就可以实现充电;

命令格式:pm.charge.hv.ctrl $enable

enable:1:直接设置HvBattModStsCoding_HV_On,不用信号值,0:使用真实的信号值

pm.charge.chk.ctrl

手工启动镍氢电池的健康检查,过滤7天的检查一次的条件,其他条件与镍氢电池的健康检查保持一致;

此命令需要上高压,若是台架可以使用pm.charge.hv.ctrl模拟上高压;

命令格式:pm.charge.chk.ctrl $enable

enable:1:过滤7天的条件,0:恢复7天的检查条件

此条命令同时会把当前已经检测的监测点数据输出,如无则说明还没有检测点数据;

250602-10:45:36.159 61980.206 I0 PM] xpm charge ubattery health
250602-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[0]:0x5A, normal:604071, chk:112
250602-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[1]:0x5A, normal:604071, chk:118
250602-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[2]:0x5A, normal:604071, chk:112
250602-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[3]:0x5A, normal:604071, chk:118
250602-10:45:36.160 61980.207 I0 PM] xpm charge health_flag[4]:0x5A, normal:604071, chk:112
250602-10:45:36.160 61980.207 I0 PM] xpm charge health_flag[5]:0x5A, normal:606308, chk:118
250602-10:45:36.161 61980.207 I0 PM] xpm charge health_flag[6]:0x5A, normal:606308, chk:107
250602-10:45:36.161 61980.207 I0 PM] xpm charge health_flag[7]:0x5A, normal:606308, chk:112
250602-10:45:36.161 61980.207 I0 PM] xpm charge health_flag[8]:0x5A, normal:606308, chk:118
250602-10:45:36.161 61980.207 I0 PM] xpm charge health_flag[9]:0x5A, normal:606308, chk:123

pm.standby

xCD直接进入深睡,核心板掉电,MCU进入Standby模式,该命令无参数

pm.standby

pm.rtcwk.reg

设置定时唤醒,设置唤醒时间建议比当前时间延后5min

pm.rtcwk.reg $module $year $month $day $hour $minute $second

module取值范围:0 ⇐ module ⇐ 4

设置2024年8月1日10:20:00唤醒
pm.rtcwk.reg 1 2024 8 1 10 20 0

pm.hm.score.set

设置系统健康度,系统健康度小于0时,满足str条件时不进入str而是进行一次重启

通过该命令设置过健康度后系统将不会继续计算健康度,直到系统重启或STR后

pm.hm.score.set 127 //-1 + 128的offset

FastBoot

通过MCU的串口命令控制SOC进入FastBoot模式

  • 进入:pm.soc.fastboot.ctrl 1
  • 退出:pm.soc.fastboot.ctrl 0

Recovery / MIBIOS

  • 进入 Recovery: pm.soc.recovery.ctrl 1
  • 进入 MIBIOS: pm.soc.bios.ctrl 1

EDL

通过MCU的串口命令控制SOC进入EDL模式

  • 进入:pm.soc.edl.ctrl 1
  • 退出:pm.soc.edl.ctrl 0

900E

通过MCU的串口命令控制SOC进入900E模式

  • 进入:pm.soc.900e.ctrl 1
  • 退出:pm.soc.900e.ctrl 0

ubattery

  • 打开放电:dio.write.channel 0x21e 1

  • 关闭放电:dio.write.channel 0x21e 0

  • 查看放电:dio.read.channel 0x21e

    • 1: 表示放电打开
    • 0:表示放电关闭

cluster

cluster.odo.init

清除总里程数据,非必要不要使用,仅作为总里程NvM校验失败,里程无法存储写入一次默认值使用

命令格式:cluster.odo.init

该命令无参数

cluster.odo.initst

读清除总里程之后的eeprom数据,用来验证清除之后的eeprom值是否正确

命令格式:cluster.odo.initst

该命令无参数

执行之后看到如下log打印,即为EEPROM数据初始化成功
EEP DATA:E10000000000000.
Return: 0, 0x00000000

cluster.dump.eep

命令格式:cluster.dump.eep $blockid

blockid:eeprom划分的block id号

test

test.set.faultid

用coedump测试,软件开发阶段使用。

命令格式:test.set.faultid $coreid $faultid

faultid: fault测试id。

coreid: 表示第几个核。tc397取值范围是0-5。

adc

adc.get.value

获取所有配置的adc值

命令格式:adc.get.value

该命令无参数

adc.get.channel.value

获取指定group指定channel的adc值

命令格式:adc.get.channel.value $group $channel

group:uint8 channel:uint8

配置字

car.write.nvm

设置配置字高低配,重启生效

命令格式:car.write.nvm $carmode

carmode:0 — 低配,2 — 高配

car.read.nvm

获取配置字高低配

命令格式:car.read.nvm

该命令无参数

故障注入

test.safety.inject

命令格式:test.safety.inject $class $major $sub

Class: 表示测试类ID

Major: 表示测试类下的主ID

sub: 表示测试类ID和主ID下的副ID

SafetyDiag

sdiag.read.log

命令格式:sdiag.read.log $type

type: 读取类型id

  • 0,表示最新被记录error日志
  • 1-64,表示第n个block记录的日志
  • 255,表示读取所有日志
  • 256,表示nvm管理日志

Diagnostic

TLS Switch

命令格式:doip.set.d040

type: 设置DID D040的值

  • 0,关闭TLS,下一个上电周期有效
  • 1,打开TLS,下一个上电周期有效

D010 Switch

命令格式:doip.get.d010 获取d010的写入状态

命令格式:doip. set.d010 $value

type: 设置DID D010的写入状态

  • 0,未写入D010,
  • 1,已写入D010

security_access_enable

命令功能: diag.set.security设置F106 (Security Key For SA)是否可写入

命令格式: diag.set.security $value

type:设置状态

  • 0, 不可修改Security Key
  • 1, 可修改Security Key

Heartbeat

heartbeat.set.switch

关心跳:heartbeat.set.switch 0

开心跳:heartbeat.set.switch 1

优先使用pm.soc.fastboot.ctrl命令进入fastboot,会自动关心跳

heartbeat.get.switch

获取心跳状态:heartbeat.get.switch