问题描述
最近出了一个机器变砖的问题,一些用户使用的设备,头一天晚上用的好好的,第二天来一上电开机就起不来了。
然后就寄回来,返厂维修。一些是因为部分电子器件坏了,还有一些是文件系统问题,重新升级一下就好了。
这个文件系统问题造成的不良品返修,在出货中占比2%,影响还是很大。
维修中心负责维修,修好了再给客户寄回去。但产品出问题还是会影响到产品口碑和出货,所以品质那边就要我们工程师尽快调查这个问题。
出问题的板卡上的SPI Nor-Flash送交了原厂,出了个测试报告,结论是这个Flash是没有问题的。
这个文件系统的索引区有两个,一个作为备份,一个作为活动分区。机器启动后在Bootloader里先加载文件系统,再加载APP程序文件,完成启动。
加载文件系统时,要读取文件分区表。分区表有两个,交替选择其中一个作为活动分区,另一个作为备份。
最后大概是发现,文件系统的分区表数据读取后,要计算CRC来校验,这时出现了错误。两个分区表都出错,无法成功加载文件系统,就会格式化分区表。
原来的文件元数据就都丢失了,所以无法正常加载APP程序文件,启动失败而变砖。
我们使用工具将Flash数据读取出来,发现分区表里有个别字节数据异常,比如0xFF变成0xBF。
仅从理论分析上,原因有三,一个是Flash数据确实发生变化,一个是SPI读取Flash数据时,信号受干扰,一个是读到DRAM里后,数据出错。
最后只能软件上在CRC校验的处理中加入保护逻辑,不要随便格式化。
解决问题中使用的工具
要想调查分析这个问题,普通调试方法是无效的,机器是无法启动的,需要读取有问题的板卡上的Flash数据。所以我们从淘宝上购买了烧写Flash的工具,还有匹配我们Flash的底座。使用的底座是根据封装类型和Pin脚数目而定的。
把板子上的SPI Nor Flash吹下来,放入烧写工具的底座,将其中的数据全部dump出来,保存成一个bin文件,然后分析文件系统出错的原因。
烧写工具介绍
深圳市思泰佳电子有限公司,VS4000P通用型编程器。
锁紧座脚数:40脚
支持芯片种类:约1.8万种
支持最大容量:512Mbit
通讯和供电:USB接口
支持系统:Win XP/7/8/10
标配包含:编程器主机,USB电缆,光盘(软件和使用说明)
支持芯片型号以设备为准,可在官网下载器件列表或编程器软件查看。
还可以下载VS4000P软件包(附使用说明、器件列表),2023年7月19日更新.zip,15.63MB。
支持的可烧写的芯片列表如下。
- 常用存储器
24系列EEPROM:24C01/02/04/08/16/32/64/128/256/512/1024...
24LC01/02/08/16/32/64/128/256/512...
25系列EEPROM:25010/020/040...640...
25 SPIflash: 25Qxx/25Xxx/25Txx/25Dxx/25Pxx/25Dxx/25Rxxxx/25Uxxxx/25Lxxxx...
27系列EPROM: 27C32/64/128/256/512
28系列: 28C32/64/128/256...28HCxx....
39系列: 39Dxxx/39Fxxx/39Lxxx/39Vxxx...
49系列: 49Fxxx/49Vxxx...
93系列EEPROM: 93C46/56/66/76/86(8bit、16bit),93LC46/56/66/76/86(8bit、16bit),93C45/55/65/75/85...
95系列: 95010/020/040/080/160/320/640/128/256/512...
45系列: 45DB011/021/041/081/161/321/641/642...
- 常用51单片机
ATEML: AT89C51/52、AT89S51/52、AT89C2051、
WINDBOND: W77E58/058/516...、W78E052/058/516...
SST: SST89E516/516RD2...
SyncMOS: SM8952A/B...
- 常用PIC单片机
PIC12Cxxx/PIC12Fxxx/PIC16Cxxx/PIC16Fxxx...
PIC18Fxxxx/PIC18LFxxxx...
- 常用AVR单片机
ATmega8/16/32/48/88/162/163/164/168/8515...
ATtiny10/11/12/13/15/24/25/28/44/45/84/2313...
AT90Sxxxx
具体使用
我手里这个是Serial Nor Flash。要根据Part No来查找芯片资料,比如根据Density(密度或容量)来查找。芯片上显示型号W25Q64JVIQ,FAE识别的型号W25Q64JVZEIQ,下载的Datasheet的名字显示型号:W25Q64JV。
可以在https://www.winbond.com/ 官网上,查找芯片手册。这个芯片是8 pin的。
选择好芯片,然后执行操作就好,很简单。可以读取Flash数据、保存文件。也可以导入一个bin文件,然后一键写入Flash。
其他烧写工具
Flash的第三方烧录器厂家有很多,可自行选择,比如可以使用dediprog SF600。
如下可供参考,烧录器厂商网站:
-
岱镨电子的烧录器(www.dediprog.com)
-
西尔特(www.xeltek.com)
-
永创(www.forcreat.com)
-
昂科(www.acroview.com)
-
艾科(www.elnec.com)
烧写芯片:存储芯片和处理器芯片
烧写芯片的目的,都是将数据写入到存储设备中。上面介绍的是专门的烧写工具,是用来裸片烧写的,可以烧写SPI Flash、EEPROM等类型的存储设备,也能烧写处理器芯片。
我上面烧写的是8MB的SPI Nor-Flash,挂在处理器(imx257)外面,存储程序和数据,而处理器里面是没有用户使用的存储空间的。
而有些存储器是和处理器集成在一起的,所以这时再烧写数据的就是处理器芯片。我们会说这个MCU或MPU的Rom是多大的,其实就是说它里面集成的闪存空间是多大的,烧写的是其内部的闪存。实际是通过处理器的端子来烧写其内部的存储设备。
对于烧写器来说,原理是一样的,将裸片IC放入合适的底座,再插入烧写器,烧写器能正确识别需要使用的端子,通过连接的端子,将数据按正确的通讯协议发送给IC,就可以了。
另外除了裸片烧录,还有板级烧录,是指在元器件都贴到PCB上以后,闪存或处理器芯片都是空数据时,进行烧录。
在实际电子产品开发和生产中,大多使用这种方法。裸片出厂只是普通物料,在贴到PCB板子上以后,才需要烧入相应的Firmware。做一个板子,烧一个程序,不会浪费物料。
板级烧录的话,一般需要定制的治具,通过顶针来连接PCB上的TP点,给IC供电,并和PCB上的IC进行通讯,来达到烧录的目的。
原理和上位机上使用的工具,同裸片烧录是类似的。
板级烧录中,还有一种情况,就是空的闪存和单纯处理器的组合,比如我使用的iMX6ULL芯片,其内部未集成客户可用的闪存,而是外挂的存储器。
这种情况下,为了提高系统的灵活性、扩展性,一般都是通过处理器来烧写外挂的Flash闪存,并不直接操作外挂的闪存。
而处理器一般也支持这种功能,使用治具和处理器进行连接,在上电后,进入烧录模式,通过处理器,再与外挂的存储器进行通讯,将数据烧写到外部闪存。
举些例子:
下面是我以前用的SONIX的8bit OTP 处理器的裸片烧写工具,也要配个底座。不像现在的芯片里的Flash都是能多次烧写,这种芯片只能烧录一次。而且资源很少,才2K ROM, 64 字节的内存。16M的处理器时钟,14个引脚。
要是通过烧写来调式或验证问题的话,烧完一个废一个。
调试器也是有的,长这个样子。
左边是我们的板卡,中间是一块接口板,右边大大的黑盒子就是来连接电脑的调试器了。
一提起芯片调试器,就想起了下面这款:
这是2007年左右,我还在开发车载音响项目,使用NEC V850芯片的调试器。
开发用的板卡上没有处理器,取而代之的是一个插座,然后插入调试器的插头。调试器另一边插入电脑,就可以设置软件断点、硬件断点、单步执行等。
当年的项目想想还有印象,当年的teammates全都没了往来,有些唏嘘。
参考:
1,松翰芯片
Writer - 松翰科技 :: Sonix Technology Co., Ltd. :: MP5-WRITER
2,美国加州的一个公司网站
https://www.ntc-tech.com/products/renesas-nec-qb-v850essx2-circuit-emulator-w-accessories-included