引子:市面上有部分家用路由器采用SPI(串行外设接口) Flash存储器保存固件(firmware),在某些需要拆换芯片扩容的场合,如何将新固件烧写到这些存储器成为一个小问题。有条件的筒子会使用通用编程器实现这一步骤,一般也可购买一些简装的USB接口编程器来完成,这里提供一种小众的方法来供大家参考。
SPI类存储器的最大特点可能是接口简洁,以华邦(Winbond)25X[双IO]及25Q[四IO]系列为例,可以提供512K-bit~512M-bit(注意单位是bit,换算成byte需要除以8)的存储容量。本例中,我扩容路由器所用的片子是W25Q128FVSIG,从该系列的型号规则可知,128F表示128M-bit也就是16M字节,V说明供电电压为2.7V~3.6V,S代表8脚SOIC封装,I工业级温度,G……
图1. W25Q128FV SOIC封装引脚定义
本烧写方法很小众,因为它的实现主体是Segger公司的J-Link调试器。这个东西只有小部分代码编写员会用到,特别是针对ARM内核MCU(如Cortex-M3的STM32F103就是个例子)开发的那群人。这个调试器用过的人大都说好,正版BASE版要300欧元。用它烧写SPI Flash存储是附属小功能,300欧元版的还不带Flash烧写功能,这里为什么讨论它,可能有人用得着吧。具体内容参考这个官方页面:
https://www.segger.com/jflash-spi.html 图2. 调试器20脚与SPI存储器的连接
一共6根线,包括复位、时钟、数据输入MOSI、数据输出MISO、片选、电源。复位那根是为了照顾那些还焊在板上的存储器,低复位使MCU一直处于复位状态,不会干扰烧写全过程。
图3. 调试器与SPI存储器连接逻辑
J-Link与SPI flash 存储器的连接(20-脚JTAG标准):
引脚 信号 类型 描述
1 VTref 输入 参考电压。它用来检查目标板电源是否正常,一般连接到目标板的电源,不要串电阻。
5 DI 输出 目标SPI的数据输入。J-Link的输出,用来传输信号到目标SPI。
7 nCS 输出 目标SPI的片选(低电平有效)。
9 CLK 输出 目标SPI的时钟信号。
13 DO 输入 目标SPI的数据输出。J-Link的输入,用来接收来自目标SPI的数据。
15 nRESET 输出 目标CPU的复位信号(低电平有效)。典型地连接到目标CPU的复位引脚,一般都叫什么“nRST”、“nRESET”或“RESET”。
19 5V电源 输出 这个引脚用来向目标硬件供电。特别注明:这个输出5V电压通过J-Link软件打开,对于常见的3.3V器件,5V电压会烧坏芯片。因此不建议从J-Link取电,除非已经配备了合适的降压稳压措施。
J-Link的4, 6, 8, 10, 12脚都连接到地,可以选择其中一根连接到目标板的地。
未配置的W25Q系列芯片的第3脚为写保护WP,第7脚为保持或复位HOLD/RESET,为了正常操作它,把这两个脚接到电源。
图4. 外围连接参考
我从马宝上买W25Q128时顺手在同一个店里买了个座子:
图5. SOIC-8座子
图6. 把W25Q128放上去
用杜邦线连接
图7. 1-白/2-绿/3-黄/4-黑
图8. 5-紫/6-灰
图9. 7.8-黄红
从某块开发板上取3.3伏作为芯片的电源,J-Link的另一排引脚多为地,连接到开发板的地线上
图10. 按上面图2接5-紫/7-白/9-灰/13-绿,顺便连接电源到1脚
从粗糙的外表看得出这个也不是什么正经的J-Link。软件烧写过程另楼展示。
——2017-03-12:补充了J-Link与SPI的详细引脚连接描述