【AT-START-F403A测评】Part6:片上Flash性能测试
[复制链接]
1.介绍
上一篇讲了Flash的Demo,这一篇来讲一下【AT-START-F403A】的性能,了解Flash的性能之后还是比较好,为以后在这个芯片上开发时对Flash读写时间的把握,所以还是要来一贴特意写一下的!
2.Flash内存
首先查看芯片手册,可以看到板载的主控是1024K字节的,这个大小还是非常够用的,基本上应用开发都是足够的。
然后看一下Flash的地址主要存在哪一块,可以看到1024K字节可以存到【0x080FFFFF】地址上,所以到时候开项目时分配地址就可以存到这个范围,当然需要看一下程序存在哪一块了。
讲工程生成好的HEX文件,通过HEX文件查看器,我这里选择了【STM32 ST-LINK Utility】软件来查看代码分配的地址,可以看到,目前代码只到存到了【0x08002A40】地址,所以从【0x08002A40】地址后面都是可以存数据的,那么我还是直接用例程中的地址来存数据。
修改例程中的代码,有个不检测Flash写入数据函数【FLASH_Write_NoCheck】需要在flash.H文件中添加声明才不会报错。
- #define TEST_BUFEER_SIZE 65536/4
- #define TEST_FLASH_ADDRESS_START (0x8000000+1024*522)
-
- typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
-
- u16 BufferWrite[TEST_BUFEER_SIZE];
- u16 BufferRead[TEST_BUFEER_SIZE];
- u32 Index=0;
- TestStatus Buffercmp(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength);
-
- int main(void)
- {
-
- Delay_init();
- UART_Print_Init(115200);
- AT32_LEDn_Init(LED2);
- AT32_LEDn_Init(LED3);
- printf("Flash Demo Start!\r\n");
-
-
- for(Index=0;Index<TEST_BUFEER_SIZE;Index++)
- {
- BufferWrite[Index]=Index;
- }
- Delay_ms(1000);
- printf("Write Start!\r\n");
- FLASH_Write(TEST_FLASH_ADDRESS_START,BufferWrite,TEST_BUFEER_SIZE);
- printf("Write Success!\r\n");
-
- Delay_ms(1000);
- printf("Write NoCheck Start!\r\n");
- FLASH_Write_NoCheck(TEST_FLASH_ADDRESS_START,BufferWrite,TEST_BUFEER_SIZE);
- printf("Write NoCheck Success!\r\n");
-
- Delay_ms(1000);
- printf("Read Start!\r\n");
- FLASH_Read(TEST_FLASH_ADDRESS_START,BufferRead,TEST_BUFEER_SIZE);
- printf("Read Success!\r\n");
-
- if(Buffercmp(BufferWrite,BufferRead,TEST_BUFEER_SIZE)==PASSED)
- {
- AT32_LEDn_ON(LED2);
- AT32_LEDn_OFF(LED3);
- }
- else
- {
- AT32_LEDn_OFF(LED2);
- AT32_LEDn_ON(LED3);
- }
-
- while(1)
- {
-
- }
- }
-
然后连续按下三次复位键,打印出来的内容如下,写入的字节数为【32769】可以看到写入Flash时校验时间将近670ms,而未校验写入Flash时间只需要不到20ms,读取Flash数据时间极小。
需要校验写入Flash的速度为48.9字节/S。
不需要校验写入Flash的速度为1638.4字节/S。
3.结论
可以看出来,写Flash最花时间是在校验上,如果可以自己写一个文件管理系统,那么就可以减少Flash写入的时间,从而达到数据管理最高效!
|