[MCU] 【AT-START-F403A测评】Part6:片上Flash性能测试

w494143467   2020-12-14 15:28 楼主

1.介绍

上一篇讲了Flash的Demo,这一篇来讲一下【AT-START-F403A】的性能,了解Flash的性能之后还是比较好,为以后在这个芯片上开发时对Flash读写时间的把握,所以还是要来一贴特意写一下的!

2.Flash内存

首先查看芯片手册,可以看到板载的主控是1024K字节的,这个大小还是非常够用的,基本上应用开发都是足够的。

1.png

然后看一下Flash的地址主要存在哪一块,可以看到1024K字节可以存到【0x080FFFFF】地址上,所以到时候开项目时分配地址就可以存到这个范围,当然需要看一下程序存在哪一块了。

2.png

讲工程生成好的HEX文件,通过HEX文件查看器,我这里选择了【STM32 ST-LINK Utility】软件来查看代码分配的地址,可以看到,目前代码只到存到了【0x08002A40】地址,所以从【0x08002A40】地址后面都是可以存数据的,那么我还是直接用例程中的地址来存数据。

3.png

修改例程中的代码,有个不检测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数据时间极小。

4.png

需要校验写入Flash的速度为48.9字节/S。

5.png

不需要校验写入Flash的速度为1638.4字节/S。

6.png

3.结论

可以看出来,写Flash最花时间是在校验上,如果可以自己写一个文件管理系统,那么就可以减少Flash写入的时间,从而达到数据管理最高效!

回复评论 (6)

1 来自 7楼 okhxyyo 

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-12-21 14:37

谢谢分享,测量的时间很精确啊。

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-12-14 20:54
引用: freebsder 发表于 2020-12-14 20:54 谢谢分享,测量的时间很精确啊。

用芯片自己的定时器会更精确呢!

点赞  2020-12-14 21:23
引用: w494143467 发表于 2020-12-14 21:23 用芯片自己的定时器会更精确呢!

flash写毕竟是偶发操作,能符合手册给的指标的80%我觉得就够了。写flash快3,5ms不影响使用。

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-12-15 18:19
引用: freebsder 发表于 2020-12-15 18:19 flash写毕竟是偶发操作,能符合手册给的指标的80%我觉得就够了。写flash快3,5ms不影响使用。

也是哈!

点赞  2020-12-15 20:31

读速度可以试试和手册比较。

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-12-16 21:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复