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 步骤:
-
通过adb shell登陆到Android系统,或者通过soc串口登陆到Android
-
输入命令:
-
stop mculog 停止mculog进程,因为mculog打开占用了串口/dev/ttyHS4,不停止会导致mcu shell无法输入,
- 8650平台执行 microcom /dev/ttyHS4,输入命令后连续输入两个回车就会出现mcu shell终端提示符:msh>#
- F3平台执行 microcom /dev/ttyXR6
-
如果mcu log比较多,无法看清楚输入的命令,可以直接复制命令:
log.set.loglevel.current 0粘贴到终端,然后输入回车,该命令可以设置mcu log等级为fatal级别。 -
如果mcu shell可以输入输出,但没有log,可能是因为soc启动后没有发送握手信号给mcu,可以输入命令:log.cat 就可以看到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通过debug板子登陆到MCU
XCD项目
下图方框1,使用type C线连接PC;方框2,连接板子的调试口。PC打开数值最小的COM口(不行每个都打开试下),即可输入shell命令(优先复制粘贴的方式输入)。注意debug板子的拨码开关和下图保持一致,杜邦线需要短接两个引脚。
O801项目
使用如下debug板子,下图方框1接板子,方框2接miniwiggle/劳特巴赫,方框3接PC为MCU串口,一般第二个COM口为MCU串口(不行每个都打开试下)
系统
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:123pm.standby
xCD直接进入深睡,核心板掉电,MCU进入Standby模式,该命令无参数
pm.standbypm.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 0pm.hm.score.set
设置系统健康度,系统健康度小于0时,满足str条件时不进入str而是进行一次重启
通过该命令设置过健康度后系统将不会继续计算健康度,直到系统重启或STR后
pm.hm.score.set 127 //-1 + 128的offsetFastBoot
通过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