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

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

[复制链接]
STMCU小助手 发布时间:2022-2-21 20:33
问题:; l' E3 T5 o' {4 U
在合计智能穿戴应用的时候,为了更好的用户体验和丰富的人机交互界面,需要更多的存储(RAM 和 FLASH)来存储自定义的图片资源 ;由于可穿戴类的产品体积都非常小,因此 FLASH&PSRAM集成在一起的 MCP 存储芯片是一个不错的选择.
' h% ?* m  M# R. Z3 l7 o* N我们的 STM32 FMC 外设是可以支持 MCP 存储芯片的,而且只需要简单的配置就可以实现MCP 的访问.
: s# H  i7 `/ Y1 r5 R' `  d0 V1 K: V; p2 o9 T4 r

3 q+ q5 h+ @" ~# {( N4 o. C调研:
  b, L; E" {8 |& V) S下面介绍使用 STM32CubeMX 配置 MCP 驱动的过程,我们使用 STM32F429+MX69V28F64 举例说明:
1 ^6 G  _2 ?" j5 q  w& R0 d
' t: V' C4 _# x2 s1 [$ L一、配置过程:
1 Z' ]% m; n( j4 H5 w6 o7 q8 F1.MX69V28F64 的总线结构和 PIN 定义:
+ T: Z! k8 V" d( b4 @! N- j! _8 ~0 r; ~! b, z- M8 J
3WYAPMI_YJKO5G4DY[V7E_J.png
" C- N3 y1 Z5 {9 r
7 q: v+ |0 t% O* B) w0 p  Q JG2Z~5G26N2DYGQBVX~_[IH.png # ?8 L3 g7 @7 R) r# j- ?; Y

0 i5 T: V! _' X# a: Z2.下面我们使用 STM32CubeMX 来配置 MCP 接口:
; I( L: |3 v3 C) O; pa.新建 STM32F429ZIYx 的工程,在 FMC 根据 MCP 芯片来配置 FMC 的参数:; ]1 h4 s5 h8 w3 r
$ I: v* J( z7 P, m- j
F5D%H%M9@86{R8[SSM%~2IL.png ! @6 h* t* l* t- R  B1 |- G. ^
' i0 d& M+ F& p/ j# {9 o
b.在 configuration 选项卡中配置 FMC 的详细参数,
5 J- N4 M4 H; X* s( P
" Z1 c" ~( j4 `3 J7 k+ P& X+ {  ~ XFXDWQ_MM[RV}_~R2Q]`~96.png
8 S  Y* G6 H# e: N: ]
* Z3 K) x4 _3 A4 Y' H3 Mc.根据 MX69V28F64 datasheet 中对时间的要求来更改 NOR/PSRAM timing 的参数:
+ s4 {& X/ c" A) P% a( M0 r& u7 o  Q8 C
L2TERORK1YR0M9Y_Y9MJPO8.png
5 G& I. \$ @2 s1 J% ~0 J- p9 m+ F2 i) d/ q, Y9 X* O
c.配置完成后,生成代码,FMC 主要初始化如下:8 ^+ i$ r4 @9 u  r
  1. /* FMC initialization function */" S+ D3 p! J5 s4 p
  2. void MX_FMC_Init(void)+ u' \3 v; I1 Y' i
  3. {0 M6 \- N. y8 Q6 O
  4. FMC_NORSRAM_TimingTypeDef Timing;
    ; A: s& R! ?0 |  u9 k# ]* w
  5. /** Perform the SRAM1 memory initialization sequence5 A2 \! o6 d! l) h1 j
  6. *// t2 q; \% S, h
  7. hsram1.Instance = FMC_NORSRAM_DEVICE;
      d1 k' K; y4 L( X5 D
  8. hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;& h) d$ }3 {1 |: j' V
  9. /* hsram1.Init */0 x: b" |2 w3 k9 X
  10. hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
    0 `$ L* `7 x" O' Z& o- v
  11. hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE;4 J+ d. g# I4 z/ Z
  12. hsram1.Init.MemoryType = FMC_MEMORY_TYPE_PSRAM;6 \+ c7 D% v: K- V5 M
  13. hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
    " ?3 N& f1 O* h) Y
  14. hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
    ) a8 x2 ]) _6 m+ p5 F
  15. hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH;
    9 E( m8 d4 [5 x" N5 I
  16. hsram1.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
    ( T7 u% p( p( l1 D6 `! q. |
  17. hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
    ) {' d- k( O$ m
  18. hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;; @9 o4 W6 o; `2 {3 _
  19. hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;4 R8 a1 }9 ]& b1 @  S
  20. hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;* M1 ]9 m3 I- y) d  N
  21. hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE;
    1 x2 }+ O, W4 `) v( S- r
  22. hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
    0 n0 ~* O$ E( d& c
  23. hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;7 k6 [; i0 \# Q- s. N
  24. /* Timing */$ Y' U- j& O) _1 c; [
  25. Timing.AddressSetupTime = 2;/ d  I* _; [' b8 x* I) W
  26. Timing.AddressHoldTime = 2;
    1 Z9 ]% Q( A5 g. v0 L* K! r; k
  27. Timing.DataSetupTime = 6;
    & R& ^& Q# j7 V
  28. Timing.BusTurnAroundDuration = 0;
    # g2 C+ z. h6 |* @9 D+ l: E& z
  29. Timing.CLKDivision = 16;
      z; b+ G( @. B9 {# \/ D6 B
  30. Timing.DataLatency = 17;2 f! L: i# \% Q( P( ?9 w" ]  q( u
  31. Timing.AccessMode = FMC_ACCESS_MODE_A;
    ) F5 G0 V! z2 v
  32. /* ExtTiming */5 z9 C- _9 m, j8 v- A
  33. HAL_SRAM_Init(&hsram1, &Timing, NULL);
    ' Y, S7 a  G  O7 L: @2 x$ Z
  34. /** Perform the NOR2 memory initialization sequence
    7 z+ O6 g& ]$ s3 k
  35. */0 z- f* D& L  u! ^1 _2 Q
  36. hnor2.Instance = FMC_NORSRAM_DEVICE;& w  R) m' R% y( [
  37. hnor2.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
    3 E! c0 Z' L/ P5 c5 {. t
  38. /* hnor2.Init */
    - ~) n. b) ]- Q2 l' G- |! E
  39. hnor2.Init.NSBank = FMC_NORSRAM_BANK2;
      z& h5 k# r! Q! J. ]+ O% V) ]! n
  40. hnor2.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_ENABLE;
    2 G' E$ ]# e/ u' S' J, ~
  41. hnor2.Init.MemoryType = FMC_MEMORY_TYPE_NOR;, E* M. r4 i, h' y1 r. S% {: E
  42. hnor2.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
    * ~; n) ?7 x  b; I; }
  43. hnor2.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;/ U; M8 k8 K/ e$ y; R3 L. l+ F! G
  44. hnor2.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;% h6 u; ]/ @; P; j7 j# ?; P
  45. hnor2.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
    , f6 U6 \9 D! S4 T# M; c6 U9 B
  46. hnor2.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;2 e# G( n/ I; O$ h, D
  47. hnor2.Init.WriteOperation = FMC_WRITE_OPERATION_DISABLE;- U: s/ W: Y9 M7 l- \0 {: v* F
  48. hnor2.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
    $ V# u. Y5 p; ?4 _' }
  49. hnor2.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;; J4 {* @- ]2 \/ s
  50. hnor2.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;1 T5 U* t' S% L4 |' Z( y% d
  51. hnor2.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;( J3 N0 x% h3 j. P" r; d: A% q
  52. hnor2.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;# c$ U% @3 `0 D7 a1 o
  53. /* Timing */
    5 b0 {: e: Y; x* d+ B2 }
  54. Timing.AddressSetupTime = 5;
    / v, L+ }9 O. {3 C
  55. Timing.AddressHoldTime = 15;
    0 l: f) p4 }; i
  56. Timing.DataSetupTime = 7;3 L% \$ @  u3 I6 P7 D7 p6 @
  57. Timing.BusTurnAroundDuration = 2;
    8 f0 z% u% k( H
  58. Timing.CLKDivision = 16;
    - X: H* T) q) E% p
  59. Timing.DataLatency = 17;
    5 W& v* n+ D1 S3 M3 v
  60. Timing.AccessMode = FMC_ACCESS_MODE_A;  p5 h$ ?' I9 ], R8 r5 w: h  _
  61. /* ExtTiming */
    - i; \% B$ N( h) G9 ^* N) n0 J. g
  62. HAL_NOR_Init(&hnor2, &Timing, NULL);8 n5 p& ~; v8 U# t: ~
  63. }
复制代码
2 h6 I  F/ D# x9 v) L' q( x
二、软件如何使用:
3 h- `5 W! h" x& U9 a用户在编写软件的时候,直接访问 FMC Bank1 的分区地址即可,FMC 外设会生成读写MCP 芯片的时序.
  S4 c! L" u: b/ D+ @+ W5 Y7 @) R2 Z1 ^+ {4 s0 F% j

; R2 w, L2 U9 u& Q 9KGSQ~BWH(U)YKDS1~5C8IR.png 8 m, Y; L) P' M' a, k1 y
8 l2 k. ]+ j3 N& l1 Q8 s5 Q6 b1 g3 q8 T

$ {' K8 h+ s& L7 H+ g5 O1 |
赞 收藏 评论0 发布时间:2022-2-21 20:33

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版