C8051f121、C8051F500串口升级成功
- 了解单片机如何在flash中运行程序的
- 了解hex文件转换成二进制文件在flash中的情况。
- 了解flash擦除原理
- 了解单片机flash中的机器码的含义
——————————————————————————————
1、单片机如何在flash中运行程序
以C8051F系列为例,单片机的程序经过keil等IDLE软件编译成hex文件,然后通过仿真器烧写至单片机的flash里,hex首先得转换成二进制文件,然后写入flash,以500为例,flash为64KB,从0x0000H起始到0xFFFF结束。
地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0000H | 02 | xx | xx | … | ||||||||||||
0x0010H | ||||||||||||||||
0x0020H | ||||||||||||||||
… | ||||||||||||||||
0xDFFFH | ||||||||||||||||
0x7FFFH | ||||||||||||||||
0xFFFFH |
如表所示,程序正常的机器码从地址0x0000H开始,最开头的一般都是02,02代表跳转,跳转到接下来的后两个字节xx xx,第四个字节往后会配置一些中断向量及其他一些操作。我们想要上电后执行boot的程序就需要把boot的程序放置在02 xx xx 的这个xx xx位置,然后boot程序里执行串口的接收程序,将串口接收的8位的数据(也就是机器码)依次烧写至flash的地址0x0003之后的位置,需要注意的是,boot程序执行完之后需要跳转的app的程序,而boot程序需要跳转的位置就是储存app跳转命令的地方,要烧写的程序分两个部分,前三个字节和后面的部分,前三个字节的储存位置解释boot程序需要跳转的位置。上电->boot->储存app跳转指令的位置->执行app跳转指令(这个指令本来应该是在flash前三个字节),这样就实现了boot。
未完待续。。。