物理基础:非易失性存储器(NVM)芯片烧录
扫描二维码
随时随地手机看文章
芯片烧录(也称为编程或烧写)的本质是将编译后的机器码程序和配置信息通过特定协议写入芯片内部的非易失性存储器(通常是Flash或OTP存储器)的过程。其核心原理涉及硬件接口、通信协议、存储单元结构和高压电子学。嵌入式系统已被广泛应用于国防电子、数字家庭、工业自动化、汽车电子等多种领域[1]。在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷[2]。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便[3]。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现ARM与设备之间的通信。以下是详细解析:
一、 物理基础:非易失性存储器(NVM)
芯片程序存储在Flash存储器(可重复擦写)或OTP存储器(一次性可编程)中:
Flash存储单元结构
基于浮栅晶体管(Floating Gate Transistor)。
写入(编程):在控制极施加高压(通常12V),使电子穿越绝缘层(隧穿效应)注入浮栅,改变晶体管的阈值电压(表示0或1)。
擦除:施加反向高压,将电子从浮栅拉出(恢复为1)。
读取:施加低压检测晶体管通断状态。
OTP存储器
通常使用熔丝(Fuse)或反熔丝(Antifuse):
熔丝型:高压烧断熔丝(开路代表0)。
反熔丝型:高压击穿绝缘层形成通路(短路代表1)。
不可擦除,适合存储密钥或配置字。
二、 烧录过程的核心步骤
连接与供电
烧录器通过编程接口(如ICSP、SWD、JTAG)连接到目标芯片的专用引脚(VDD、GND、CLK、DATA、RESET)。
烧录器提供稳定的编程电压(VPP)(高于芯片工作电压,用于Flash写入/擦除)。
通信协议
烧录器与芯片通过同步串行协议通信(如SPI、I²C或厂商私有协议)。
典型指令:
Chip Erase(全片擦除)
Program Memory(写入程序)
Read Memory(校验)
Write Configuration Bits(写配置字)
数据写入流程
配置字(Configuration Bits)
独立于程序存储区的特殊寄存器,控制芯片底层行为(如时钟源、看门狗、代码保护)。
错误配置会导致芯片无法工作(如选错时钟源)。
芯片烧录,又称固件烧录或编程,是将程序代码写入芯片的过程。这一过程通常涉及到两个环节:一方面是对芯片内部存储单元的编程,另一方面是对芯片功能的验证。烧录不仅仅是将代码写入芯片,更重要的是保证烧录后的程序能够可靠运行,这需要借助专门的烧录工具和技术。
芯片内部通常集成有闪存(Flash Memory)或可重编程的只读存储器(EEPROM)。这些存储器可以通过特定的通信协议,比如SPI、I2C、UART等,将代码传输至芯片内。烧录完成后,可以通过读取、比对的方式验证烧录结果是否正确。这保证了芯片在不同环境下的兼容性和稳定性。
三、 烧录器的关键作用
协议转换器
将PC端的USB/UART信号转换为芯片能识别的编程协议信号(如ICSP的PGD/PGC时序)。
高压生成器
集成DC-DC升压电路,生成Flash编程所需的高压(5V芯片可能需要12V编程电压)。
时序控制器
精确控制编程脉冲的宽度和时序(纳秒级精度),防止过写损坏存储单元。
数据校验器
烧录后自动读取芯片内容,与原始文件比对(校验和或逐字节比对)。
四、 不同烧录方式的区别
方式原理典型接口适用场景
离线烧录烧录器自带存储,脱机操作专用夹具量产批量烧录
在线烧录(ICSP)通过PCB预留接口烧录已焊芯片ICSP/SWD/JTAG研发调试、小批量生产
Bootloader芯片通过UART/USB自更新程序UART/USB固件远程升级
五、 为什么需要专用烧录器?
高压需求:普通IO口无法提供Flash编程所需高压。
协议私有化:不同芯片厂商(如硕飞、Microchip、ST)使用私有编程算法(如PIC的LVPP协议)。
时序严苛:编程脉冲宽度、时钟频率需严格符合芯片手册要求。
安全机制:绕过代码保护区需特殊指令序列。
无论对嵌入式产品添加新功能还是修改原有的软件BUG,涉及的都只是用户应用程序的改动,初始化代码Startup.s是无需改动的,所以扇区O的内容在ISP过程中可否保持不变,关键是能否使首次编译生成的Vector.0始终与以后多次编译的App.o相匹配。
需要特别指出的是,当用户应用程序发生改变时,实际的中断服务函数(一般是C语言函数)很可能发生了改变,或者是实际的中断服务函数的入口地址发生了改变,怎么通过固定不变的中断向量Vector.o找到变化的中断服务函数的入口呢?只要这个问题解决了,就可以使首次编译生成的Vector.o始终和以后多次编译的App.o相匹配,这是该方案可行性的关键所在。为解决这个问题,笔者在Flash的固定位置(0x80002000~0x800020ff)做了一个中断映射表,实际上里面存放的是一条条跳转指令。由于中断映射表INTMap.s和用户应用程序App.c是一同编译、链接的,里面的跳转指令当然可以准确找到实际的中断服务程序入口;而位于扇区O的中断向量Vector.s虽然不和用户应用程序一起编译,但中断向量里的跳转指令是绝对跳转到固定的中断映射表区域。这样通过2次跳转就可以准确找到中断服务程序的入口。
选择合适的芯片烧录座至关重要,它不仅影响到烧录效率,还会影响到整个生产或开发过程的稳定性和灵活性。
1. 根据芯片封装类型选择:
当前市场上的芯片封装形式多种多样,包括DIP、QFN、BGA等。根据谷易电子芯片烧录座工程师介绍:选择烧录座时,需首先确认与芯片封装的兼容性,确保连接的可靠性与稳定性。(提供芯片规格书或者芯片封装形式、芯片引脚数、芯片引脚中心间距、芯片尺寸(本体尺寸和含引脚尺寸))。
2. 可重复使用性:
烧录座作为一种消耗品,其耐用性决定了其使用寿命和经济性。在选用烧录座时,应考虑其是否具备长时间、高频次使用的性能。
3. 兼容不同型号:
对于研发设计阶段而言,可能需要对不同型号产品反复测试。选择兼容性好的烧录座,能有效降低更换烧录座带来的时间成本和经济成本。
4. 数据传输速度:
烧录座所支持的最大数据传输速度也是考量因素之一。快速数据传输能显著降低大批量烧录所需时间,提高生产线效率。