eMMC芯片协议中规定的寿命相关的信息
cat/sys/kernel/debug/mmc2/mmc2\:0001/ext_csd, 其中mmc2需要从具体的系统中查找。此寄存器信息固定了保留块的使用情况,当其值为0x02时,表示已经消耗了80%的保留块,提示警告。在emmc 协议v5.0以上的版本增加了设备使用寿命的预估值以及保留块的使用情况。设备使用寿命的评估值,以10%使用寿命时间为分隔。在嵌入式linux下,可以通过cat命令查看
在emmc 协议v5.0以上的版本增加了设备使用寿命的预估值以及保留块的使用情况。该两种信息都存在于emmc 的ext_csd(The Extended CSD register)寄存器中。
- PRE_EOL_INFO[267]
此寄存器信息固定了保留块的使用情况,当其值为0x02时,表示已经消耗了80%的保留块,提示警告。当为0x03时,提示已经到了使用寿命。

- DEVICE_LIFE_TIME_EST_TYP_A[268]/B[269]
设备使用寿命的评估值,以10%使用寿命时间为分隔。当其值为0x0B时表示已经到了使用寿命。


在嵌入式linux下,可以通过cat命令查看emmc的ext_csd寄存器信息。
cat /sys/kernel/debug/mmc2/mmc2\:0001/ext_csd, 其中mmc2需要从具体的系统中查找。ls /dev/mmcblk?应该显示相应的值,此处应该为mmcblk2。

这样不好查看,一连串16进制字符串,应该有1024个字符。为了方便查看使用重定向后,通过shell 脚本查看。
- 重定向保存ext_csd寄存器的数值:
cat /sys/kernel/debug/mmc2/mmc2\:0001/ext_csd > ext_csd.txt
#!/bin/bash
echo "eMMC ext_csd 寄存器值 (索引 0~511)"
echo "=================================="
# 读取整个文件内容
content=$(cat ext_csd.txt | tr -d ' \n\r\t')
# 检查内容长度
content_len=${#content}
echo "文件内容长度: $content_len 个字符"
# 初始化索引
index=0
# 处理连续的十六进制字符串
for ((i=0; i<content_len && index<512; i+=2)); do
# 提取两个字符作为一个字节
if [ $((i+1)) -lt $content_len ]; then
hex_byte="${content:$i:2}"
else
# 如果字符串长度是奇数,最后一个字节补0
hex_byte="${content:$i:1}0"
fi
# 确保是有效的十六进制数字
if [[ "$hex_byte" =~ ^[0-9A-Fa-f]{2}$ ]]; then
# 转换为大写
hex_byte=$(echo "$hex_byte" | tr '[:lower:]' '[:upper:]')
# 显示 ext_csd[index] 格式
printf "ext_csd[%3d] : 0x%s\n" $index $hex_byte
# 索引递增
((index++))
fi
done
# 如果内容不足512字节,用0填充剩余索引
while [ $index -lt 512 ]; do
printf "ext_csd[%3d] : 0x00\n" $index
((index++))
done
echo
echo "处理完成,共显示 $index 个寄存器值"
- 将以上代码保存为extcsd_show.sh文件,并上传至嵌入式系统,和重定向的ext_csd.txt保存在同一路径下。增加extcsd_show.sh的执行权限。
- chmod a+x extcsd_show.sh,如果非超级用户需要使用sudo 命令,即sudo chmod a+x extcsd_show.sh
- 然后执行./extcsd_show.sh即可。


从打印输出的信息中可以看到和寿命信息相关的寄存器的值。
更多推荐



所有评论(0)