Bootloader之vivi源码解析(二)
继上面章节后,本节重点介绍vivi常用功能及实现原理。
(1)Load加载命令
加载命令,可以将程序或者文件通过串口加载到RAM和FLASH中,实现程序烧写功能。使用的数据传输协议是XMode协议。
加载数据到FLASH中的流程为,先加载到RAM,然后将RAM写入FLASH中。写FLASH过程本文不再介绍。
加载数据到RAM主要通过以下XMode协议解析函数实现。
1 int get_record(void)
2 {
3 int c, block_num = 0;
4 int i;
5 __u32 check_sum;
6 for (i = 0; i < BLOCK_SIZE; i++)
7 rbuffer[i] = 0x00;
8 check_sum = 0;
9 i = -2;
10 c = get_byte();
11 switch (c) {
12 case SOH: /* Receive packet */
13 for (;;) {
14 c = get_byte();
15 switch (i) {
16 case -2:
17 block_num = c;
18 break;
19 case -1:
20 break;
21 case BLOCK_SIZE:
22 if ((check_sum & 0xff) != c)
23 {
24 return -3;
25 } else {
26 return block_num;
27 }
28 break;
29 default:
30 rbuffer[i] = c;
31 check_sum += c;
32 }
33 i++;
34 }