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

FSMC驱动TFTLCD原理,时序和寄存器介绍

[复制链接]
aimejia 发布时间:2018-5-28 13:58
一,FSMC简介1 E3 o& T, [: ]1 g
FSMC:灵活的静态存储控制器8 r. W1 F- B' D8 v) w
能够与同步或异步存储器和16位PC存储器卡连接
% g3 \9 @) Y/ _1 n6 B% H0 Q* ?STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器6 Z( Q( e! r. L
STM32 407和103是不支持SD RAM的,429,439支持SD RAM操作
; _& @- s: V% C& ]5 ^% i' g  }8 V' f6 \( F
二,FSMC驱动LCD原理
3 ?, |. m/ [2 b3 g& w* p 1.jpg 7 H; W9 w6 b1 ^4 r4 S

) C) Z. q, j% r* x- v8 bFSMC驱动外部SRAM(LCD被当做SRAM)- W% X; B- ?  X

' D1 t2 i: `) n( A6 ]) {) e0 ^SRAM控制包含:
, J" {  [) A3 P    地址线(如A0~A25)
# x0 d/ o# b0 {3 {! u$ A1 P    数据线(如D0~D15), S$ @, V, L, T2 _: M
    写信号(WE,即WR)
7 o6 u$ R9 H0 Y' G% Z    读信号(OE,即RD)  H$ u6 |1 ?! Z% E) D
    片选信号(CS)
- A- X0 g$ P# M( N5 j0 r- a8 k1 ?    若SRAM支持字节控制,还有UB/LB信号。
. m" t. x& P, G' ~! D% W0 ^) `* A6 H3 W& C& L3 G+ [7 _
上一节提到的TFTLCD信号,RS、D0~D15、WR、RD、CS、RST和BL等
5 i; h" A- N1 F" G/ u' V9 }" b' `, n6 i
其中真正操作LCD时用到的就只有:9 _$ Y* z9 Y0 m
    数据&命令:RS2 }; d; r3 d$ ?
    数据线0~D15+ j/ C/ p1 n1 t$ B3 |
    写信号:WR
9 q: _# r7 W# J, l    读信号:RD
, d2 G8 V4 J7 Z2 p    片选信号:CS# A! ~0 B6 i2 H1 i7 n( `% X" B6 Y4 u

: i/ j- U" R/ Q4 }( f7 r5 n: `; R) }操作时序和SRAM控制类似,唯一不同是TFTLCD有RS信号,但是没有地址信号
' d) s4 I2 f! h- f, D. S( u3 D0 F- |3 r/ v1 O2 o" A( s& Z% Z4 `
TFTLCD通过RS信号来决定传送是数据还是命令,可以理解为一个地址信号 ; L: S- {/ X6 S
将RS接到FSMC地址线A10(A0-A25随意),TFTLCD就被当做一个SRAM使用 7 C- o( _$ j! Q" z& j
这样TFTLCD成为只有一个地址的SRAM设备,从而实现FSMC驱动TFTLCD2 z( a5 B2 {& U1 a4 t

7 I1 w8 d7 H) K8 q0 d6 V& N三,FSMC存储块' {0 }% F- C8 N# r2 \8 }
STM32的FSMC支持8/16/32位数据宽度,我们使用的LCD为16位,所以设置选择16位 % D3 z& L4 e9 l0 W9 G& e8 |; n
FSMC的外部设备地址映像:STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块
3 v) S- ]2 k5 B0 g9 l# y
, x! ~+ L1 y/ ]5 j8 k 2.jpg ' K3 R3 @% p. T2 T
; l4 y# B" a0 a
如图:
* M* q/ ~* m2 n7 [) G0 }    FSMC分为4块,每块256M字节又被划分为4*64,即四个片选
) y! T. V/ q7 h; v  L1 I$ L( _    NOR / PSRAM使用块1,共256M( P( Q  q# {1 y6 f5 @
    NAND闪存使用块2,3,共512M" }3 ]* @' Q5 x) H9 X! h9 d0 y* n
    PC卡使用块4,共256M; C$ P; w! i+ `1 B8 K$ S; o

# E" A& ^0 \: d5 ?所以我们使用NOR PSRAM驱动TFTLCD
& h: O7 y, ^6 \( V
5 h+ @" X5 X6 D& z* S8 V0 T四,存储块1(Bank1)寄存器介绍1 ~) ?% h; e) g
STM32的FSMC存储块1(Bank1)用于驱动NOR FLASH/SRAM/PSRAM 1 D1 S" F. ^9 B; R9 }
Bank1被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。 5 S* O: Y7 i* c0 B1 Z
Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。 这里HADDR,是内部AHB地址总线 - T4 w- D( g( b4 o5 n
HADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。
. ~$ z6 X0 N4 }0 a' X+ N2 d; O: u0 a0 t
如下图所示:
/ K: t. {5 p) J; r+ Z, h8 H, j! [0 t9 u( Y
3.jpg / k9 \8 i2 _3 t" `1 _. y' b

5 i1 A( F" n3 i! @* o; Y说明:
5 k* P5 y+ u* r- y+ X     HADDR[27:26]是不可手动配置的,当选择所在区后会自动赋值9 C- M& N# c9 e9 c
# w) p: l0 c& \1 \+ H/ K
注意:
$ r: G* H* K4 x" @! T     1,当Bank1接 8位宽度存储器时:HADDR[25:0] -> FSMC_A[25:0]
# z8 l+ _' y' i# m  a     2 添加当Bank1接16位宽度存储器时:HADDR[25:1] -> FSMC_A[24:0]对应关系的进一步解释 7 [8 h7 \% V) h" Q3 P
       添加寄存器FSMC_BTRx为读时序控制,FSMC_BWTRx为写时序控制
  b9 J) \  }/ H. f- Z5 W( |
, h9 B5 D+ R. b# O* h9 W        由于内部每个地址对应一个字节,外部设备16位宽,FSMC的一个地址对应两个字节
; ~" ~/ K# d  d; j        即:# }8 j& X6 k# s, n$ q) {
             0000对应FSMC_A[0]=0   (2字节)
' T0 K, R8 F. G" o. k             0010对应FSMC_A[0]=1   (2字节)
1 e% u$ B: |, X! e; Y4 w8 I             0100对应FSMC_A[1]=1   (2字节)6 O$ R/ P: c7 t: u+ m& H

! d0 S" M' Y! r: w8 }' }. `        所以对应关系需要除以2,内部右移一位对齐$ a0 V/ @; U  I* a# c; J% O0 n
        此时最低位没用,访问最低位需要使用UB/LB
. K1 {, g( m) |) {( l- D3 p7 q, K, G5 {$ f
     不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]  c, \( d  j. ?1 D+ L  j" S
3 j* g0 C- {5 Q: `$ ~1 ?4 m0 V
五,存储块1(Bank1)模式A读写时序6 I# H* B  ~5 W9 h
STM32的FSMC存储块1支持的异步突发访问模式 2 w4 E' h6 e- L7 T  B9 ~
包括模式1,模式A~D等多种时序模型,驱动SRAM一般使用模式1或模式A
/ J% u& t* C8 u+ e5 F6 @我们使用模式A驱动LCD(当做SRAM使用),模式A支持读写时序分开设置2 q& r. H8 v2 V4 p& x2 A* z
) _" }  U5 P4 A3 I
上一篇说的LCD时序,我们知道,LCD的读写耗时是不同的.写快读慢 8 _, L- i: b0 A# x5 p$ y" [) V
这里采用模式A,针对不同的速度,做不同的设置
* f6 _" }- o) v9 e+ B5 b# y! x% d* n' U9 W; {( D. r% B
模式A读时序:; R8 G% V2 c4 `1 U. K7 B

. [7 o: {, d8 N5 c8 H1 O 4.jpg ! n9 }2 E, e$ g) u8 t+ \

% P2 I5 G; `2 i6 j4 ]: [& v模式A写时序:4 k1 A" c4 U# b6 r

. W: e- m" q1 S: k) y8 D$ R8 h5 | 5.jpg   O! b9 ^& i: h/ d# X7 Q2 d

: U! D; M. m" N  o  @3 ]( MILI9341时序-读写高低电平最小持续时间:# M& g6 E8 P4 D% B* C
# W# z; O" F8 l
6.jpg 4 Q2 n  |- N6 @5 I
, `! P" K, a) |/ b; _  H
根据ILI9341时序读写高低电平最小持续时间来配置模式A的读写时序
2 C& c, U1 E: W& M! e# K* z' D1 y9 }
六,FSMC相关寄存器介绍
9 {! }4 ?( e2 x) y) z对于NOR FLASH/PSRAM控制器-存储块1,可通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。 : \  Y. P& x2 b4 e
通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。
6 S4 D7 C0 g" i. G- \/ z4 S$ O. q0 a! W2 n* D) w: e9 T
1,SRAM/NOR闪存片选控制寄存器(FSMC_BCRx)
$ R1 u7 P7 g/ V$ A5 r+ x  f, k9 v+ I7 N/ J( D+ R0 P* B
7.jpg
7 L  D" W3 I  P7 H! b
- [/ z3 x6 z# u$ F; s& pEXTMOD:" K" ?( r4 K0 H/ [3 u# q
     扩展模式使能位,控制是否允许读写不同的时序,需设置为1( X( C" C4 y/ Q- s* r+ Q2 O0 M
WREN:
& s9 y3 [  o. O! V     写使能位。我们要向TFTLCD写数据,需设置为1& }( n8 Z3 P. d% @6 P$ P' g/ S& }
MWID[1:0]:7 }; P0 O0 {/ J$ w9 |- O
     存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。
+ N; Z9 z, X7 r! r! M( U/ |. N, y* }     我们的TFTLCD是16位数据线,需设置WMID[1:0]=01。7 e, O* \2 u  ~
MTYP[1:0]:
, T3 Z* K& M# h6 j     存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。
. \  G. p( ~# m/ b$ s2 s* \     我们把LCD当成SRAM用,需设置MTYP[1:0]=00。& d( N1 p3 [! Z* @/ Z
MBKEN:1 z6 j5 E* g3 q  g. i& o- m
     存储块使能位。需设置为1+ C" {: u' S# L. y3 `8 t# c" K$ g

) J% r+ D/ M8 z, T2,SRAM/NOR闪存片选时序寄存器(FSMC_BTRx)-读时序控制
& ]! {' J8 e' u8 P7 L
& \3 S5 y# J: E' r 8.jpg
* N: [9 d3 E( C  I+ Z! T4 A4 Q0 z1 w( ]+ s5 x
ACCMOD[1:0]:9 l" c4 }0 u( ^: {  W& ?4 \, j
     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。# ?5 a  M3 ]- p2 T& c. j9 m
     我们使用模式A,需设置为00* P6 e7 D8 j' k
DATAST[7:0]:* G* y/ M  x  {% R. J
     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。% [8 p5 i; H$ E9 n3 T$ s5 \" g
     对于ILI9341相当于RD低电平持续时间,最大355ns5 d- v  v$ H, X) Z0 l" e
     对于STM32F1,一个HCLK=13.8ns (1/72M),设置为15,相当于16个HCLK=220.8,加上STM32F1的FSMC性能较低一些,配置为15即可
& h5 b7 N, \: V7 R) U6 l9 B     对于STM32F4,一个HCLK=6ns(1/168M) ,设置为60(360)。
. v4 F2 F. `" n( ]6 JADDSET[3:0]:4 z) P2 J5 a1 A! p' S0 v3 o% K
     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大为15。
  s9 y  P3 b, Y     对ILI9341来说,这里相当于RD高电平持续时间,为90ns。) o0 T" J1 Z) ~7 R# H6 B- e
     STM32F1的FSMC性能较低,即便设置为0,RD也有190ns高电平,所以设置为10 G! H# g9 w: S1 _9 A
     STM32F1设置为15
3 u; u- m; ~+ n# g0 j( X! l" @. f8 {# t: {6 H& N9 S
注意:
0 j9 r7 u1 v6 c0 V9 W     如果未设置EXTMOD位,则读写共用FSMC_BTRx时序寄存器
: O$ ^, q$ V& U$ t7 E9 F0 n4 X# W, X
5 W/ V( L+ g( v1 i0 J3,SRAM/NOR闪存写时序寄存器(FSMC_BWTRx)-写时序控制
4 b% Z5 i) T) O& j6 y. k. D' r* Q$ x0 J
9.jpg " y: ?- ^7 M2 y8 s+ M7 w- Q% `
! ~7 Z/ U% ?/ L) t) v8 `
ACCMOD[1:0]:
8 P8 s2 |, c/ f# h     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。# |/ z& T/ w. J4 u* \% X
DATAST[7:0]:! H% o! s8 B; k) W6 s! Q# `" M6 M
     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。
, z! B8 l6 ^$ Z0 X     对ILI9341来说,其实就是WR低电平持续时间,为15ns,不过ILI9320等则需要50ns。
' N6 H! [5 T" A     考虑兼容性,对STM32F1一个HCLK=13.8ns (1/72M),设置为3(4*13.8=55.2);1 o8 L9 T* m. @2 {/ s5 K
     对STM32F4,一个HCLK=6ns(1/168M) ,设置为9(9*6=54)。
" u! d, m' g  }% YADDSET[3:0]:
1 M" P% r  u# j2 c8 C6 d7 e, I     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大值为1111 = 15。
* k. j- `/ H  p: J& J; A     对ILI9341来说,这里相当于WR高电平持续时间,为15ns。  O) y+ L2 M7 o8 ^
     考虑兼容ILI9320,STM32F1即便设置为1,WR也有100ns高电平,所以设置为1。- I$ {5 d5 O* X, ?, [
     而对STM32F4,则设置为8(9*6=54)+ b* E* c5 f) f5 w: u" {7 |- [! u, h

! N) `! N+ k- v8 L: f七,寄存器组合说明# i& [/ C, A& }- i
ST官方库寄存器定义中并没有FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等单独寄存器
8 i; L+ }. r' l* z% B而是将他们进行了一些组合。规律如下:' Z0 t1 ?* i. I0 o* j( }1 z: a

: r5 T* Y# T8 \; `FSMC_BCRx和FSMC_BTRx,组合成BTCR[8]寄存器组,他们的对应关系如下:
7 s* N* P/ o0 ]
- S- a3 {' J/ ]+ E9 ?" a9 x) vBTCR[0]对应FSMC_BCR1,BTCR[1]对应FSMC_BTR1
" S$ g0 M9 L+ }& `  L& TBTCR[2]对应FSMC_BCR2,BTCR[3]对应FSMC_BTR2
* Y/ F# C6 ^8 o; V5 l: zBTCR[4]对应FSMC_BCR3,BTCR[5]对应FSMC_BTR3
! ]) o! h' V1 hBTCR[6]对应FSMC_BCR4,BTCR[7]对应FSMC_BTR4% }0 Z' ^4 ?0 Y, _7 q
& y3 b6 \- z4 b% K4 I9 \
FSMC_BWTRx则组合成BWTR[7],他们的对应关系如下:0 ~4 R. b/ t4 q' U# G& J, i  ]
/ w/ }5 Q  v9 O/ T. t9 u
BWTR[0]对应FSMC_BWTR1,
1 |. V* |4 w$ k) J7 p& TBWTR[2]对应FSMC_BWTR2,
" T4 T( W0 ?% p8 V1 c8 B+ `1 n" `" DBWTR[4]对应FSMC_BWTR3,( A( O& ]- u' ~( C3 _
BWTR[6]对应FSMC_BWTR4,
/ B# Y& v7 D3 H  v6 vBWTR[1]、BWTR[3]和BWTR[5]保留
5 b9 g0 K4 \2 o1 `- G. r0 J
  h' W3 x. U& [/ d* M5 J- |# ?$ [5 v$ O
6 g' T# U2 C% C0 d+ w) Z8 e! d9 I

% @. L2 Q" v0 L9 d) }; v7 Y转载自BraveWangDev
7 Y; i0 p: N& p$ X  i  N6 J: s- ?0 T# f3 X7 w$ d, Z+ `
收藏 1 评论1 发布时间:2018-5-28 13:58

举报

1个回答
czhstm 回答时间:2019-10-3 20:51:03
买了野火的学习板,只有库文件方式FSMC控制,我想要寄存器方式控制

所属标签

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