使用CH341备份存储器数据

[toc]

前言

仪表出现异常时,我们可能需要结合仪表当前的存储的数据进行分析异常,但是某些数据并不能直接获取,如备份区数据或者一些未映射的参数。这时候我们可能需要在这个发生异常的表上进行烧录一个调试程序,或者是进行一些测试操作。如果异常的仪表只有一台,这样的操作风险是很大的,很容易把原有的数据给覆盖或者修改,破坏了仪表异常环境

所以我们可以对这些存储器先进行一个备份,然后再对异常的仪表进行调试和测试操作。又或者备份后将数据写入到另一台仪表,在另一台仪表上调试测试,保证原表环境百分百不受影响(在另一台表调试时需要自行判断异常是否受外围影响,如电路或其他器件,计量芯片、外部时钟等,避免在新表上无法找到异常原因)。出现问题时,可以使用备份数据进行恢复

备份与写入操作仍有一定风险,一定要保证操作正确!

CH341工具

简介

USB总线转接芯片 CH341 - 南京沁恒)

CH341是一个USB总线转换芯片,可以实现USB转串口、打印口、并口、同步串口等功能,多个平台均有驱动。

支持同步串口也就说可以使用IIC或者SPI协议操作大部分存储芯片。

某宝上就有成品套装,关键词:CH341编程器。价格大概十几,包含CH341A 编程器,烧录夹,转接板

微信图片_20230730142326-gigapixel-standard-scale-1_00x

微信图片_20230730142738_1-gigapixel-standard-scale-1_00x

  • 电源指示灯,红灯:表示已达到工作电压,如果供电后该指示灯不亮,请立即断开,检查线路是否存在短路
  • 读写指示灯,绿灯:表示正在读取或写入数据

驱动程序

CH341资料下载 - 南京沁恒

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并口等,通过微软数字签名认证,用于随产品发行到最终用户

驱动安装程序均是一键安装,没有过多的操作,点击安装后提示驱动预安装成功表示安装完成。

image-20230727163543459

image-20230727163625405

软件

AsProgrammer

项目Github:https://github.com/nofeletru/UsbAsp-flash

AsProgrammer是一个开源项目,近期也仍有在维护。程序支持 CH341A、UsbAsp、AVRISP(LUFA,Arduino、FT232H)芯片,通过此软件你可以对SPI,I2C,MicroWire协议的存储器进行编程

image-20230727144628689

NeoProgrammer

软件地址:https://4pda.ru/...

基于AsProgrammer项目进行了修改和更新,界面布局更清晰,支持更多存储器(更新停留于21年)

image-20230729153814635

如果不是接触一些新存储器,两个工具使用差异不大。两者均可自行添加存储芯片

读写步骤

0.注意

操作前后,工具以及芯片均不要通电!引脚很小,容易接触不良或者误动导致短路,连接和断开芯片都应该先断电!

1.软件准备

打开NeoProgrammer 软件,点击Search

image-20230727164341661

输入目标芯片型号,Select

image-20230727164427545

可以看到主页面左侧下方有一个连接示意图,如图所示,转接板接到该方向的左侧位置,且1号引脚在右上方

image-20230727164514471

通电前一定要确定好烧录夹和芯片引脚是否对应、烧录夹的转接板与CH341接口引脚是否对应,接错时通电可能会带来不可预测的后果

烧录夹连接到转接板,将CH341工具拨杆往上打开,根据芯片协议将转接板插入到相应位置。注意插入的方向,1号引脚对应到如图方向的右上角。插入后,下压拨杆,锁紧引脚

2.连接芯片

找到烧录夹红线引脚,对准芯片第一引脚位置(芯片/PCB丝印圆点位置为第一引脚)

image-20230727162808719

image-20230727163242423

微信图片_20230730142738-gigapixel-standard-scale-1_00x

3.读取并校验

Snipaste_2023-07-30_16-10-55

W25Q64(SPI)

读取中…耐心等待

Snipaste_2023-07-28_16-20-00

读取完成,提示Success

Snipaste_2023-07-28_16-20-33

读取完必须进行一边数据校验,保证读出的数据与芯片数据一致,同样提示Sucess后可继续下一步操作

Snipaste_2023-07-30_16-11-38

Snipaste_2023-07-28_16-22-04

保存数据,保存为HEX文件

Snipaste_2023-07-30_16-08-50

24C128(I2C)

操作一样,读取并校验

Snipaste_2023-07-28_16-32-42

Snipaste_2023-07-28_16-32-47

4.写入并校验

打开之前备份的HEX文件

Snipaste_2023-07-30_16-28-54

Snipaste_2023-07-30_16-30-06

注意FLASH写入前需要先擦除,否则报错

Snipaste_2023-07-28_16-44-12

擦除

Snipaste_2023-07-30_16-11-53

Snipaste_2023-07-28_16-44-23

写入

Snipaste_2023-07-30_16-11-15

Snipaste_2023-07-28_16-44-44

可以在写入选项把擦除操作勾选上,实际上写入完后也需要进行一边校验数据的操作,但是可以看到写入的选项默认勾选了校验,所以就不需要再手动操作校验了

Snipaste_2023-07-28_16-44-52

5.数据查看

刚刚操作的两款芯片都来自PMAC9523,两个芯片分别存储了充值记录和费率数据

从备份中烧录到另一台PMAC9523后对比两台仪表数据,充值记录费率数据均一致

image-20230730162652682

image-20230730162707173

其他问题

缺少芯片支持

手动添加芯片

编辑XML文件

AsProgrammer 编辑根目录下chiplist.xml XML文件

NeoProgrammer 编辑根目录下Import.xmlXML文件

根据芯片类型,在相应元素下新增

如,我要添加一款CATALYST公司的型号为CAT24C32的I2C协议EEPROM

找到I2C元素,如果没有该公司元素可以创建一个,再添加CAT24C32元素并附上一些属性,需要的属性可以参考已有的芯片

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<chiplist>
<I2C>
<CATALYST>
<CAT24C32 page="xx" size="xxxx" addrtype="x"/>
</CATALYST>
</I2C>
</chiplist>

属性的相关定义解析在XML文件头部有注释,但是说明不完整。比如我要添加的芯片中属性addrtype的定义就没有进行描述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!--- 
size - размер данных микросхемы памяти в байтах(DEC)
page - размер страницы микросхемы памяти в байтах(DEC). Для SST AAI Word programm - SSTW. Для SST AAI Byte programm - SSTB.
id - индефикатор микросхемы памяти(HEX). Поддерживаются опкоды 9F, 90, AB, 15
spicmd - команды для серий микросхем памяти 25, 45, 95(EEPROM)
script - имя файла скрипта из папки scripts
-->
size - 芯片数据大小,以字节为单位(DEC)
page - 芯片的页面大小,以字节为单位(DEC)。对于SST AAI字程序-SSTW。对于SST AAI 字节程序-SSTB
id - 芯片标识符(十六进制)。支持的操作码有 9F、90、AB、15
spicmd - 用于 25、45、95(EEPROM)系列存储芯片的命令
script - 脚本文件夹中的脚本文件名

<!---
size - memory chip data size in bytes (Decimal)
page - memory chip page size in bytes and in WORD for ATmega AVR (Decimal).
For SST AAI Word programm - SSTW.
For SST AAI Byte programm - SSTB.
pageep - ATmega Eeprom page size in bytes (Decimal)
sizeeep - ATmega Eeprom memory size in bytes (Decimal)
id - Memory chip identifier (HEX).
vcc - voltage (1.8, 2.5, 3.3, 5.0) for information only, (3.3 default if absent)
dies - number of dies (for large spi flash over 256Mo)
planes - number of planes (for some SPI NAND)
script - script file name from scripts folder
besize - block erase size in kbytes with opcode $D8 (SPI NOR/NAND)
adapt - adapter (adapKB90, adapI2C, adapi2CM34, adapSPI45, adap93C, adap93S, adap59C, adapM35080, adapCT1C)
comment- Any comment
-->

还好这是个开源项目,将项目clone下来后搜索,找到了相关内容。实际上是写地址的地址位数。

1
2
3
4
5
6
7
8
9
const
//Как посылать адрес ячейки в чип
I2C_ADDR_TYPE_7BIT = 0;
I2C_ADDR_TYPE_1BYTE = 1;
I2C_ADDR_TYPE_1BYTE_1BIT = 2;
I2C_ADDR_TYPE_1BYTE_2BIT = 3;
I2C_ADDR_TYPE_1BYTE_3BIT = 4;
I2C_ADDR_TYPE_2BYTE = 5;
I2C_ADDR_TYPE_2BYTE_1BIT = 6;

根据芯片手册说明,地址为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
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<chiplist>
<I2C>
<CATALYST>
<CAT24C32 page="32" size="4096" addrtype="5"/>
</CATALYST>
</I2C>
</chiplist>

保存与导入

编辑完成后AsProgrammer 只需要保存XML文件

image-20230729161141090

NeoProgrammer 除了保存XML文件还需要进行导入操作以更新芯片数据库,如图

image-20230729155757895

image-20230729160043571

image-20230729161020149

从列表移除

同样编辑XML文件

AsProgrammer直接删除对应元素即可删除芯片

image-20230729161221575

NeoProgrammer 需要将芯片属性删除,注意元素仍以\>结尾,删除后保存XML文件,再导入一遍

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<chiplist>
<I2C>
<CATALYST>
<CAT24C32 />
</CATALYST>
</I2C>
</chiplist>

image-20230729160406392

除了CAT24C32被移除,CATALYST节点因为没有芯片也提示被移除了

image-20230729160454264

读写芯片失败

  • 确认接线以及芯片型号是否正确和接触良好
  • 可以尝试将芯片拆下再读取
  • 确认芯片是否有读写使能、读写保护、纠错机制等
  • 芯片列表不排除存在错误,如协议类型错误,页数量大小错误等等,可根据芯片手册核对,然后修改

烧录夹不适用

烧录夹的使用需要占用一些空间去夹住芯片,如果PCB上空间不足,可以选择拆下芯片或者购买如图独立针型的夹子

微信图片_20230730152402-standard-scale-1_00x-cropped-gigapixel