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 无法输入。microcom /dev/ttyHS4,输入命令后连续输入两个回车就会出现 mcu shell 终端提示符:msh>#
- 如果 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
P1 及 P1 之后的硬件板子可用,P1 之前的板子无法使用,输入有问题。
type-c 出来的 UART TTL 电平必须是 1.2V,其他电平都无法输入输出。
PC 通过 debug 板子登陆到 MCU
TODO:
系统
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 等级,不会保存配置,掉电后配置丢失。
命令格式: log.set.loglevel.current $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.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 addrregaddr:i2c 外设寄存器地址value:往寄存器写入的值
i2c.read.reg
读取指定的 i2c 设备寄存器的值。
命令格式: i2c.read.reg $bus $slaveaddr $regaddr
bus:i2c 总线 id 号,默认从 0 开始slaveaddr:i2c 外设 7bit slave addrregaddr:i2c 外设寄存器地址
i2c.read.reghub
读取 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 外设mode: 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 外设mode: 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
该命令可以使能或关闭 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 天的检查条件
此条命令同时会把当前已经检测的监测点数据输出,如无则说明还没有检测点数据。
250502-10:45:36.159 61980.206 I0 PM] xpm charge ubattery health
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[0]:0x5A, normal:604071, chk:112
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[1]:0x5A, normal:604071, chk:118
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[2]:0x5A, normal:604071, chk:112
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[3]:0x5A, normal:604071, chk:118
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[4]:0x5A, normal:604071, chk:112
250502-10:45:36.160 61980.206 I0 PM] xpm charge health_flag[5]:0x5A, normal:606308, chk:118
250502-10:45:36.161 61980.206 I0 PM] xpm charge health_flag[6]:0x5A, normal:606308, chk:107
250502-10:45:36.161 61980.206 I0 PM] xpm charge health_flag[7]:0x5A, normal:606308, chk:112
250502-10:45:36.161 61980.206 I0 PM] xpm charge health_flag[8]:0x5A, normal:606308, chk:118
250502-10:45:36.161 61980.206 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 0x21e1:表示放电打开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
用 coredump 测试,软件开发阶段使用。
命令格式: test.set.faultid $coreid $faultid
faultid:fault 测试 idcoreid:表示第几个核。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: uint8channel: 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:表示测试类 IDMajor:表示测试类下的主 IDsub:表示测试类 ID 和主 ID 下的副 ID
SafetyDiag
sdiag.read.log
命令格式: sdiag.read.log $type
type:读取类型 id0:表示最新被记录 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:未写入 D0101:已写入 D010
security_access_enable
命令功能: diag.set.security 设置 F106(Security Key For SA)是否可写入。
命令格式: diag.set.security $value
type:设置状态0:不可修改 Security Key1:可修改 Security Key