Cortex-M单片机下载数据到外部flash

匿名 (未验证) 提交于 2019-12-03 00:37:01

主机环境:Windows 10 64bit

开发环境:MDK 5.23

目标板:LPC54114

之前在NXP社区得到一块LPC54114的板卡,是由万利制作的,LPC54114是一款双核MCU,包含了一颗M4主核和一颗M0+从核,利用该板卡学习了一下双核MCU的开发流程,板卡中提供了一颗W25P80FLASH,之前拥有的板卡都没有挂外部FLASH,刚好之前利用LPC54608学习TouchGFX时可以把图片资源下载到外部FLASH中,因此借此机会来学习一下如何把数据下载到外部FLASH。

平时烧录代码我们都是烧录到MCU内部的FLASH中,如下图:


可以看到下载的时片上256KB的FLASH,该算法文件是由DFP包提供的,具体可以在keil5的安装目录下找到,如下:


加载到内部FLASH的算法有了,但加载到外部FLASH的算法还没得。keil5中提供了LPC54608板卡的外部FLASH算法,LPC54114的外部FLASH算法就需要我们自己实现了,而且我们的板卡不是NXP官方的板卡,更不可能提供外部FLASH的加载算法了。。。

进入到keil的FLASH目录,如下:


拷贝LPC5460x_MT25QL128文件夹到LPC54114_W25P80文件夹,并把其中有关信息全部替换成LPC54114相关信息。keil中提供了FlashOS.h头文件,定义了烧录到外部FLASH的相关接口,很简单,如下:


这就是本次我们需要实现的相关接口,修改的关键文件只有两个:FlashDev.c以及FlashPrg.c,首先看FlashDev.c文件,该文件定义了外部Flash的相关信息,经过简单修改就可以使用了,如下:

  1. structconst
  2. #endif
我们只需要修改设备名字、设备类型、起始地址、大小、页大小、扇区大小等等,这些信息都可以在W25P80的手册中找到。其中设备的起始地址可以随便定义,但不要和内部FLASH地址冲突即可。这里定义的是0x10000000.FlashPrg.c文件是接口的实现文件,这里我把LPC54114SDK中的polling_flash下的驱动文件拿来直接使用了,即mx25r_flash.c/h文件,只需要在FlashPrg.c中简单调用即可,如下:

  1. long
  2. char
  3. struct
  4. voidvoid
  5. intvoidsize_tbool
  6. if
  7. return
  8. intvoid
  9. return
  10. /*
  11. intlonglonglong
  12. return
  13. /*
  14. intlong
  15. return
  16. /*
  17. intvoid
  18. return
  19. /*
  20. intlong
  21. return
  22. /*
  23. intlonglongchar
  24. return
  25. /*
  26. intlonglongchar
  27. return
  28. longlonglongchar
  29. int
  30. for
  31. if
  32. return
  33. return
编译该工程,即可产生我们所需要的加载FLASH的算法文件,如下:



下面就来测试下该算法文件是否起作用,在LPC54114的SDK中的polling_flash工程中加入一段测试数据,如下:

  1. const
  2. {'N','X','P','I','C'
把这几个字符存放到外部FLASH的0地址上,这里0x10000000是我们刚才定义的外部FLASH的起始地址。此外还需要添加一下该算法文件,如下:



下载该代码,本以为就此成功了,结果弹出一个框框,说无法加载FLASH编程算法,


MDK中的输出信息如下:Insufficient RAM for Flash Algorithms !,百度搜索了一下说是为该算法分配的RAM空间小了,默认的是0x1000,4KB大小,这里加大了已被改成了8KB,如下:


再次下载,很顺畅地下载成功了,赶紧打开串口助手查看测试结果:


成功地从外部FLASH读取到了我们定义的‘NXPIC’字符,测试成功!大家一起来测试一下吧!

工程文件:http://download.csdn.net/download/key123zhangxing/9956278

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!