使用CH341备份存储器数据
使用CH341备份存储器数据
[toc]
前言
仪表出现异常时,我们可能需要结合仪表当前的存储的数据进行分析异常,但是某些数据并不能直接获取,如备份区数据或者一些未映射的参数。这时候我们可能需要在这个发生异常的表上进行烧录一个调试程序,或者是进行一些测试操作。如果异常的仪表只有一台,这样的操作风险是很大的,很容易把原有的数据给覆盖或者修改,破坏了仪表异常环境
所以我们可以对这些存储器先进行一个备份,然后再对异常的仪表进行调试和测试操作。又或者备份后将数据写入到另一台仪表,在另一台仪表上调试测试,保证原表环境百分百不受影响(在另一台表调试时需要自行判断异常是否受外围影响,如电路或其他器件,计量芯片、外部时钟等,避免在新表上无法找到异常原因)。出现问题时,可以使用备份数据进行恢复
备份与写入操作仍有一定风险,一定要保证操作正确!
CH341工具
简介
CH341是一个USB总线转换芯片,可以实现USB转串口、打印口、并口、同步串口等功能,多个平台均有驱动。
支持同步串口也就说可以使用IIC或者SPI协议操作大部分存储芯片。
某宝上就有成品套装,关键词:CH341编程器。价格大概十几,包含CH341A 编程器,烧录夹,转接板
- 电源指示灯,红灯:表示已达到工作电压,如果供电后该指示灯不亮,请立即断开,检查线路是否存在短路
- 读写指示灯,绿灯:表示正在读取或写入数据
驱动程序
CH341A 有 2 个驱动程序,一个支持UART,另一个支持I2C/SPI,安装时注意区分
CH341SER.EXE
USB转串口Windows一键式安装驱动程序,支持CH341,通过微软数字签名认证,支持USB转UART的3线和9线SERIAL串口等,用于随产品发行到最终用户
CH341PAR.EXE
USB转JTAG/SPI/I2C/并口/GPIO等接口的Windows一键式安装驱动程序,支持CH341的USB转SPI/I2C/EPP并口/MEM并口等,通过微软数字签名认证,用于随产品发行到最终用户
驱动安装程序均是一键安装,没有过多的操作,点击安装
后提示驱动预安装成功
表示安装完成。
软件
AsProgrammer
项目Github:https://github.com/nofeletru/UsbAsp-flash
AsProgrammer是一个开源项目,近期也仍有在维护。程序支持 CH341A、UsbAsp、AVRISP(LUFA,Arduino、FT232H)芯片,通过此软件你可以对SPI,I2C,MicroWire协议的存储器进行编程
NeoProgrammer
软件地址:https://4pda.ru/...
基于AsProgrammer项目进行了修改和更新,界面布局更清晰,支持更多存储器(更新停留于21年)
如果不是接触一些新存储器,两个工具使用差异不大。两者均可自行添加存储芯片
读写步骤
0.注意
操作前后,工具以及芯片均不要通电!引脚很小,容易接触不良或者误动导致短路,连接和断开芯片都应该先断电!
1.软件准备
打开NeoProgrammer 软件,点击Search
输入目标芯片型号,Select
可以看到主页面左侧下方有一个连接示意图,如图所示,转接板接到该方向的左侧位置,且1号引脚在右上方
通电前一定要确定好烧录夹和芯片引脚是否对应、烧录夹的转接板与CH341接口引脚是否对应,接错时通电可能会带来不可预测的后果
烧录夹连接到转接板,将CH341工具拨杆往上打开,根据芯片协议将转接板插入到相应位置。注意插入的方向,1号引脚对应到如图方向的右上角。插入后,下压拨杆,锁紧引脚
2.连接芯片
找到烧录夹红线引脚,对准芯片第一引脚位置(芯片/PCB丝印圆点位置为第一引脚)
3.读取并校验
W25Q64(SPI)
读取中…耐心等待
读取完成,提示Success
读取完必须进行一边数据校验,保证读出的数据与芯片数据一致,同样提示Sucess
后可继续下一步操作
保存数据,保存为HEX文件
24C128(I2C)
操作一样,读取并校验
4.写入并校验
打开之前备份的HEX文件
注意FLASH写入前需要先擦除,否则报错
擦除
写入
可以在写入选项把擦除操作勾选上,实际上写入完后也需要进行一边校验
数据的操作,但是可以看到写入的选项默认勾选了校验,所以就不需要再手动操作校验了
5.数据查看
刚刚操作的两款芯片都来自PMAC9523,两个芯片分别存储了充值记录
和费率数据
从备份中烧录到另一台PMAC9523后对比两台仪表数据,充值记录
和费率数据
均一致
其他问题
缺少芯片支持
手动添加芯片
编辑XML文件
AsProgrammer 编辑根目录下chiplist.xml
XML文件
NeoProgrammer 编辑根目录下Import.xml
XML文件
根据芯片类型,在相应元素下新增
如,我要添加一款CATALYST公司的型号为CAT24C32的I2C协议EEPROM
找到I2C元素,如果没有该公司元素可以创建一个,再添加CAT24C32元素并附上一些属性,需要的属性可以参考已有的芯片
1 |
|
属性的相关定义解析在XML文件头部有注释,但是说明不完整。比如我要添加的芯片中属性addrtype
的定义就没有进行描述。
1 | <!--- |
还好这是个开源项目,将项目clone下来后搜索,找到了相关内容。实际上是写地址的地址位数。
1 | const |
根据芯片手册说明,地址为2组8位数据,即对应常量 I2C_ADDR_TYPE_2BYTE = 5;
,所以属性addrtype
值为5
A write operation requires two 8-bit data word addresses following the device address word and acknowledgment.
1 |
|
保存与导入
编辑完成后AsProgrammer 只需要保存XML文件
NeoProgrammer 除了保存XML文件还需要进行导入操作以更新芯片数据库,如图
从列表移除
同样编辑XML文件
AsProgrammer直接删除对应元素即可删除芯片
NeoProgrammer 需要将芯片属性删除,注意元素仍以\>
结尾,删除后保存XML文件,再导入一遍
1 |
|
除了CAT24C32
被移除,CATALYST
节点因为没有芯片也提示被移除了
读写芯片失败
- 确认接线以及芯片型号是否正确和接触良好
- 可以尝试将芯片拆下再读取
- 确认芯片是否有读写使能、读写保护、纠错机制等
- 芯片列表不排除存在错误,如协议类型错误,页数量大小错误等等,可根据芯片手册核对,然后修改
烧录夹不适用
烧录夹的使用需要占用一些空间去夹住芯片,如果PCB上空间不足,可以选择拆下芯片或者购买如图独立针型的夹子