2.2.问题分析
从上图可以了解到,实际上这里所定义的 Sector 的大小为 128Bytes,也就是 STM32L073 的 Page,所以这里的 Sector 定义
与 STM32L073 的参考手册定义的 Sector 是不一样的,不要造成误解。在 RM0367 中,每 128Bytes 为 1 个 Page,每 32 个
Page 才是 1 个 Sector。所以不要误会就行了。在这个 Mapping 窗口中,也可以看到地址 0x08003C00 之前的空间为 Readonly,也就是 Bootloader 所处的空间为只读,以避免对这部分代码的重写。而后面的空间,也就是用户代码所处的空间为
Read/Write/Erase。
这些信息是从哪里来的呢?其实它来自于 usbd_dfu_flash.c 里边定义的描述符 FLASH_DESC_STR,如下:
#define FLASH_DESC_STR "[url=home.php?mod=space&uid=2283616]@internal[/url] Flash /0x08000000/120*128 a,1416*128 g"
来解释一下这个描述符的内容:
0x08000000 为起始地址。“a”代表的是 Read-only,“ g”代表 Read/Write/Erase。也就是说,“ a”所指明的区域为
Bootloader 的空间,“ g”所指明的区别为用户代码空间。大小由前面的数字决定,乘号“*”前面的为 Sector 的个数,后面
的为 Sector 的大小,这里的意思就是从 0x08000000 开始,前面 120 个 Sector(每个 Sector 为 128 字节)为 Read-only,后
面 1416 个 Sector(每个 Sector 为 128 字节)为 Read/Write/Erase。
举另外一个例子,在\Projects\STM32L053C8-Discovery\Applications\USB_Device\DFU_Standalone\Src 下的
usbd_dfu_flash.c 是这样定义的:
#define FLASH_DESC_STR "@Internal Flash /0x08000000/28*01Ka,36*01Kg"
它的意思就是前面 28 个 Sector(每个 Sector 为 1KB)为 Read-only,后面 36 个 Sector(每个 Sector 为 1KB)为
Read/Write/Erase。因为在这个例子中,用户代码起始地址为 0x08007000。在 Dfuse Demo 的界面中,你也将看到只有 64
个 Sector,双击打开后能看到每个 Sector 为 1KB。
搞明白这个事,就知道如何去修改这个描述符 FLASH_DESC_STR,让它符合 STM32L073RBT6 的大小了。
|