米客方德128M 工业级 SDNAND可靠性测试
手册下载:米客方德工业级SDNAND.pdf
离线
#!/bin/sh
let i_ok=0
let i_error=0
while [ 1 ]; do
rm /d/work3/x.bin -rf #源文件路径
rm /f/work3/x.bin -rf #米客方德SDNAND插入的U盘路径
dd if=/dev/urandom of=/d/work3/x.bin bs=1M count=110 #生成随机数文件
sync
mkdir -p /f/work3/ #生成U盘文件夹
cp /d/work3/x.bin /f/work3/x.bin -rf #复制到U盘
sync #立即写入U盘
if [[ $(md5sum /d/work3/x.bin /f/work3/x.bin | awk '{print $1}' | uniq | wc -l) == 1 ]]; then #比较源文件与U盘文件
let i_ok=i_ok+1 #正确次数 +1
else
let i_error=i_error+1
md5sum /d/work3/x.bin /f/work3/x.bin
mkdir -p /d/work3/dump/$i_error/
cp /d/work3/x.bin /d/work3/dump/$i_error/source.bin #发生错误保存 源文件到电脑,方便后面比较
cp /f/work3/x.bin /d/work3/dump/$i_error/dest.bin #发生错误保存 目标到电脑,方便后面比较
fi
echo "$i_ok 次测试通过, $i_error 次测试错误."
done
离线
离线
有datasheet吗
离线
这个速度比得上普通的SSD了,确定不是写缓存的?
离线
24小时不间断也只能测试3000次左右,
测完10万次,需要 100000/3000= 33 (天)
离线
这速度应该没真正写入到芯片上
离线
确实,这个速度是buff过的,把directIO打开吧。真的往disk上写,才是真的写。
离线
确实,这个速度是buff过的,把directIO打开吧。真的往disk上写,才是真的写。
可是我已经执行了 sync命令了,这算同步了吧?
请教”directIO“怎么打开呢?
离线
1.1 dd测试DirectIO
iops——写测试 dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct
iops——读测试 dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct
bw——写测试 dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct
bw——读测试 dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct
离线
willX 说:确实,这个速度是buff过的,把directIO打开吧。真的往disk上写,才是真的写。
可是我已经执行了 sync命令了,这算同步了吧?
请教”directIO“怎么打开呢?
感谢楼上各位大佬,但是又被各位大佬带坑里面去了,dd命令是生成本地硬盘的随机数文件,后面那个cp才是复制到sdnand。
离线
#!/bin/sh
let i_ok=0
let i_error=0
while [ 1 ]; do
date +"测试时间:%Y-%m-%d %H:%M:%S"
rm /d/work3/x.bin -rf #源文件路径
rm /f/work3/x.bin -rf #米客方德SDNAND插入的U盘路径
dd if=/dev/urandom of=/d/work3/x.bin bs=1M count=117 > /dev/null 2>&1 #生成随机数文件
sync
mkdir -p /f/work3/ #生成U盘文件夹
#cp /d/work3/x.bin /f/work3/x.bin -rf #复制到U盘
dd if=/d/work3/x.bin of=/f/work3/x.bin bs=1M status=progress oflag=direct
sync #立即写入U盘
if [[ $(md5sum /d/work3/x.bin /f/work3/x.bin | awk '{print $1}' | uniq | wc -l) == 1 ]]; then #比较源文件与U盘文件
let i_ok=i_ok+1 #正确次数 +1
else
let i_error=i_error+1
md5sum /d/work3/x.bin /f/work3/x.bin
mkdir -p /d/work3/dump/$i_error/
cp /d/work3/x.bin /d/work3/dump/$i_error/source.bin #发生错误保存 源文件到电脑,方便后面比较
cp /f/work3/x.bin /d/work3/dump/$i_error/dest.bin #发生错误保存 目标到电脑,方便后面比较
fi
echo -e "$i_ok 次测试通过, $i_error 次测试错误.\n"
done
根据各位大佬的指教,我把脚本更新了一下,复制文件用了dd替换cp命令,并加入status=progress参数显示进度,oflag=direct立即写入。
离线
测试时间:2023-05-25 22:59:45
120586240 bytes (121 MB, 115 MiB) copied, 31 s, 3.9 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 31.6652 s, 3.9 MB/s
20479 次测试通过, 0 次测试错误.
离线
测试时间:2023-05-29 13:37:35
120586240 bytes (121 MB, 115 MiB) copied, 31 s, 3.9 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 31.6728 s, 3.9 MB/s
27539 次测试通过, 0 次测试错误.
测试时间:2023-05-29 13:38:22
120586240 bytes (121 MB, 115 MiB) copied, 31 s, 3.9 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 31.5946 s, 3.9 MB/s
27540 次测试通过, 0 次测试错误.
测试时间:2023-05-29 13:39:08
120586240 bytes (121 MB, 115 MiB) copied, 31 s, 3.9 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 31.7013 s, 3.9 MB/s
27541 次测试通过, 0 次测试错误.
离线
测试时间:2023-05-31 20:04:04
120586240 bytes (121 MB, 115 MiB) copied, 32 s, 3.7 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 32.8315 s, 3.7 MB/s
31502 次测试通过, 0 次测试错误.
测试时间:2023-05-31 20:04:54
120586240 bytes (121 MB, 115 MiB) copied, 32 s, 3.7 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 32.792 s, 3.7 MB/s
31503 次测试通过, 0 次测试错误.
测试时间:2023-05-31 20:05:43
119537664 bytes (120 MB, 114 MiB) copied, 32 s, 3.7 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 32.9793 s, 3.7 MB/s
31504 次测试通过, 0 次测试错误.
测试时间:2023-05-31 20:06:33
45088768 bytes (45 MB, 43 MiB) copied, 12 s, 3.7 MB/s
离线
你这个输出信息上看不出哪个是读取速率、哪个是写入速率呀。
因为目前是想测试到底擦除多少次报废,所以简单一点处理,只有写入速度,3.9MB/s。
离线
离线
看来,这个SLC的SD NAND的寿命周期约 3万次左右。
离线
测试时间:2023-06-04 17:50:49
121634816 bytes (122 MB, 116 MiB) copied, 34 s, 3.6 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 34.5256 s, 3.6 MB/s
37932 次测试通过, 16 次测试错误.
测试时间:2023-06-04 17:51:42
120586240 bytes (121 MB, 115 MiB) copied, 34 s, 3.5 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 34.6834 s, 3.5 MB/s
37933 次测试通过, 16 次测试错误.
测试时间:2023-06-04 17:52:35
121634816 bytes (122 MB, 116 MiB) copied, 34 s, 3.6 MB/s
117+0 records in
117+0 records out
122683392 bytes (123 MB, 117 MiB) copied, 34.5319 s, 3.6 MB/s
37934 次测试通过, 16 次测试错误.
离线
不懂就问,三万次算正常吗?
离线
不懂就问,三万次算正常吗?
看起来不够理想,工业SLC怎么也得10万次吧,这手册上没有提颗粒类型与寿命
而且写入到标称后,高低温冷储存数据保存时限也是工业场景的重要参数
最近编辑记录 4610 (2023-06-05 14:33:52)
离线
测试看起来是windows下msys?
不太好,windows和文件系统有许多不可控因素,说服力不足
建议搞个正式的嵌入式linux,直接挂sdio总线上,不要过USB读卡器
就直接dd mmcblk,也不必上文件系统
最近编辑记录 4610 (2023-06-05 14:41:25)
离线
3W次就达到0存储时间写爆,个人认为对于SLC来说非常不理想.
正规的nand 寿命也并不是说到达p/e 数值就会原地暴币.
离线
@海石生风
谢谢,不过Nor写起来好慢,容量也小。现在最性价比的产品是什么?EMMC?
离线
3W次就达到0存储时间写爆,个人认为对于SLC来说非常不理想.
正规的nand 寿命也并不是说到达p/e 数值就会原地暴币.
我猜这是MLC?
记得零几年买的128M TF卡写入明显比这个要快
最近编辑记录 4610 (2023-06-06 12:29:09)
离线
@海石生风
谢谢,不过Nor写起来好慢,容量也小。现在最性价比的产品是什么?EMMC?
汽车电子的控制处理相关系统就用Nor Flash,这个领域可靠性是第一指标,一般用RTOS + Nor Flash组合。赛普拉斯、镁光等厂商就有专门用于汽车电子的大容量(512Mbit~2Gbit)的Nor Flash。
本人即将开工的医疗小仪器项目也打算用 RTOS + Nor Flash组合,UI用Slint,可靠性应该比较高了。
如果可靠性不是第一指标,性价比高的应该还是SD NAND + Linux方案了。
最近编辑记录 海石生风 (2023-06-06 19:37:59)
在线
不知道成本如何
128M SPI NAND 比如W25N01 5块含税
性能似乎比lz这个sd卡还高一些
最近编辑记录 CONFIG.SYS (2023-06-06 23:28:05)
离线
有没有128GB/256GB的工业级贴片卡?
离线
增加两个 echo 输出信息,便于观察
#!/bin/sh
let i_ok=0
let i_error=0
while [ 1 ]; do
date +"测试时间:%Y-%m-%d %H:%M:%S"
rm /d/work3/x.bin -rf #源文件路径
rm /f/work3/x.bin -rf #米客方德SDNAND插入的U盘路径
echo "Generate random number file"
dd if=/dev/urandom of=/d/work3/x.bin bs=1M count=117 status=progress > /dev/null 2>&1 #生成随机数文件
sync
mkdir -p /f/work3/ #生成U盘文件夹
#cp /d/work3/x.bin /f/work3/x.bin -rf #复制到U盘
echo "SDNAND Direct Write Test"
dd if=/d/work3/x.bin of=/f/work3/x.bin bs=1M status=progress oflag=direct
sync #立即写入U盘
if [[ $(md5sum /d/work3/x.bin /f/work3/x.bin | awk '{print $1}' | uniq | wc -l) == 1 ]]; then #比较源文件与U盘文件
let i_ok=i_ok+1 #正确次数 +1
else
let i_error=i_error+1
md5sum /d/work3/x.bin /f/work3/x.bin
mkdir -p /d/work3/dump/$i_error/
cp /d/work3/x.bin /d/work3/dump/$i_error/source.bin #发生错误保存 源文件到电脑,方便后面比较
cp /f/work3/x.bin /d/work3/dump/$i_error/dest.bin #发生错误保存 目标到电脑,方便后面比较
fi
echo -e "$i_ok 次测试通过, $i_error 次测试错误.\n"
done
离线
还要看随机掉电的情况,比如用TF卡,随机掉电就容易挂掉
离线
稳定性才是最重要的。
离线