你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STemWin 驱动移植-FLASH&PSRAM(MCP)接口驱动设计

[复制链接]
STMCU小助手 发布时间:2022-2-21 20:33
问题:
在合计智能穿戴应用的时候,为了更好的用户体验和丰富的人机交互界面,需要更多的存储(RAM 和 FLASH)来存储自定义的图片资源 ;由于可穿戴类的产品体积都非常小,因此 FLASH&PSRAM集成在一起的 MCP 存储芯片是一个不错的选择.
我们的 STM32 FMC 外设是可以支持 MCP 存储芯片的,而且只需要简单的配置就可以实现MCP 的访问.


调研:
下面介绍使用 STM32CubeMX 配置 MCP 驱动的过程,我们使用 STM32F429+MX69V28F64 举例说明:

一、配置过程:
1.MX69V28F64 的总线结构和 PIN 定义:

3WYAPMI_YJKO5G4DY[V7E_J.png

JG2Z~5G26N2DYGQBVX~_[IH.png

2.下面我们使用 STM32CubeMX 来配置 MCP 接口:
a.新建 STM32F429ZIYx 的工程,在 FMC 根据 MCP 芯片来配置 FMC 的参数:

F5D%H%M9@86{R8[SSM%~2IL.png

b.在 configuration 选项卡中配置 FMC 的详细参数,

XFXDWQ_MM[RV}_~R2Q]`~96.png

c.根据 MX69V28F64 datasheet 中对时间的要求来更改 NOR/PSRAM timing 的参数:

L2TERORK1YR0M9Y_Y9MJPO8.png

c.配置完成后,生成代码,FMC 主要初始化如下:
  1. /* FMC initialization function */
  2. void MX_FMC_Init(void)
  3. {
  4. FMC_NORSRAM_TimingTypeDef Timing;
  5. /** Perform the SRAM1 memory initialization sequence
  6. */
  7. hsram1.Instance = FMC_NORSRAM_DEVICE;
  8. hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  9. /* hsram1.Init */
  10. hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  11. hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE;
  12. hsram1.Init.MemoryType = FMC_MEMORY_TYPE_PSRAM;
  13. hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  14. hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  15. hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH;
  16. hsram1.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  17. hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  18. hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;
  19. hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  20. hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  21. hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE;
  22. hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  23. hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  24. /* Timing */
  25. Timing.AddressSetupTime = 2;
  26. Timing.AddressHoldTime = 2;
  27. Timing.DataSetupTime = 6;
  28. Timing.BusTurnAroundDuration = 0;
  29. Timing.CLKDivision = 16;
  30. Timing.DataLatency = 17;
  31. Timing.AccessMode = FMC_ACCESS_MODE_A;
  32. /* ExtTiming */
  33. HAL_SRAM_Init(&hsram1, &Timing, NULL);
  34. /** Perform the NOR2 memory initialization sequence
  35. */
  36. hnor2.Instance = FMC_NORSRAM_DEVICE;
  37. hnor2.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  38. /* hnor2.Init */
  39. hnor2.Init.NSBank = FMC_NORSRAM_BANK2;
  40. hnor2.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE;
  41. hnor2.Init.MemoryType = FMC_MEMORY_TYPE_NOR;
  42. hnor2.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  43. hnor2.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  44. hnor2.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  45. hnor2.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
  46. hnor2.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  47. hnor2.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;
  48. hnor2.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  49. hnor2.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  50. hnor2.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  51. hnor2.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  52. hnor2.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  53. /* Timing */
  54. Timing.AddressSetupTime = 5;
  55. Timing.AddressHoldTime = 15;
  56. Timing.DataSetupTime = 7;
  57. Timing.BusTurnAroundDuration = 2;
  58. Timing.CLKDivision = 16;
  59. Timing.DataLatency = 17;
  60. Timing.AccessMode = FMC_ACCESS_MODE_A;
  61. /* ExtTiming */
  62. HAL_NOR_Init(&hnor2, &Timing, NULL);
  63. }
复制代码

二、软件如何使用:
用户在编写软件的时候,直接访问 FMC Bank1 的分区地址即可,FMC 外设会生成读写MCP 芯片的时序.


9KGSQ~BWH(U)YKDS1~5C8IR.png


收藏 评论0 发布时间:2022-2-21 20:33

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版