在设计芯片的时候,关于烧录的环节是一个不得不考虑的问题。首先打消掉,由外部硬件直接操控FLASH的方案,这个方案有很多缺陷。
1)每个IC利用的FLASH型号各不相同,每种型号的FLASH的烧录命令和流程都有差别,这会导致烧录器须要把所有的FLASH掌握办法都内置,但是万一下次换了一个最新型号的FLASH呢?因此这种办法通用性非常低。
2)有些IC未必利用FLASH,有可能会采取OTP(一次性编程),OTP一样平常是由芯片自己的内部寄存器来掌握,直接写FLASH的烧录器在这根本就没办法用了。

那现在换一个思路,让芯片自己掌握自己的内部存储器,用通信的办法把固件发给芯片,由它自己来完成这个过程呢?
很好,现在面临的问题变成了如何将这段烧录程序导入到芯片中运行。
如果,芯片设计的时候便是一个空片。那如何将程序下载进芯片中运行呢?
别怕,JTAG在调试的时候,是不是可以随便修正RAM,随便设置PC指针?而且险些所有的芯片硬件都是支持JTAG功能的吧?那么这个问题就有解了。
可以用JTAG将一段程序写入到RAM中,设置PC指针到程序的起始地址。这个程序是专门用来烧录FLASH和OTP的程序,按下列步骤去做:
1)将这个程序导入到RAM中
2)将固件的一部分内容导入到RAM的某个固定地址
3)设置PC到这个程序的起始地址,同时在程序结束的位置设置一个断点
4)启动这个烧录程序,等待断点触发,往来来往2、3、4即可
这个便是Keil烧录算法的实现事理。而算法文件便是这个IC对应的烧录程序。那现在,完备搞定烧录的问题吗? 不,还只完成了一半。
这种办法还有好几个缺陷:
1)烧录器硬件本钱比较高
2)JTAG烧录器的掌握繁芜度和开拓难度很高
3)对付安全程度非常高的芯片,JTAG很不屈安
因此,能不能默认就将这段程序在芯片出厂的时候烧录或者固化到芯片上呢?同时采取本钱更低和通用性更高的串口通信。故这段程序怎么放,有很多方案:
1)直接芯片投片的时候,由数字电路设计职员将固件硬编码到晶圆上,芯片生产出来的时候,都会携带这个程序。这个的缺陷便是,这段固件不可变动,固化前会经由大量的测试。
2)对付有OTP的芯片的话,会在芯片出厂测试时将这个程序烧录到OTP中,烧录办法用的便是JTAG。
芯片的烧录方案,基本上便是这些了,对付那些打仗到的各种千奇百怪的烧录工具,实在也便是厂商自己定的通信协议的不同导致的。