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)
/* Private typedef -----------------------------------------------------------*/
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");
//Fill BufferWrite data to test
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); //Write data to flash
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); //Write data to flash
printf("Write NoCheck Success!\r\n");
Delay_ms(1000);
printf("Read Start!\r\n");
FLASH_Read(TEST_FLASH_ADDRESS_START,BufferRead,TEST_BUFEER_SIZE); //read data from flash
printf("Read Success!\r\n");
if(Buffercmp(BufferWrite,BufferRead,TEST_BUFEER_SIZE)==PASSED) //Compare the buffer
{
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写入的时间,从而达到数据管理最高效!
引用: freebsder 发表于 2020-12-14 20:54 谢谢分享,测量的时间很精确啊。
用芯片自己的定时器会更精确呢!
引用: w494143467 发表于 2020-12-14 21:23 用芯片自己的定时器会更精确呢!
flash写毕竟是偶发操作,能符合手册给的指标的80%我觉得就够了。写flash快3,5ms不影响使用。
引用: freebsder 发表于 2020-12-15 18:19 flash写毕竟是偶发操作,能符合手册给的指标的80%我觉得就够了。写flash快3,5ms不影响使用。
也是哈!