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

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

[复制链接]
aimejia 发布时间:2018-5-28 13:58
一,FSMC简介# _: i$ `* e# {5 T3 S5 f+ r
FSMC:灵活的静态存储控制器  ]  i& l! B: I2 W
能够与同步或异步存储器和16位PC存储器卡连接* i/ t" \; J5 p. h, D5 M* g$ N
STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器' l2 z4 a8 j1 |1 n
STM32 407和103是不支持SD RAM的,429,439支持SD RAM操作
8 p/ H. B% B4 e0 E  G* \
& p2 K" j2 \" a/ u0 k* z二,FSMC驱动LCD原理# K1 P) ^" k9 l# R4 J) L
1.jpg & F' G3 d0 j4 Z9 c. r, i1 E3 A

3 I# j" Q. L! ?' D5 W5 x. |FSMC驱动外部SRAM(LCD被当做SRAM)
; T5 J! ?) [5 \- w  G- F1 p8 J: K  I, B1 w
SRAM控制包含:4 g6 y0 C+ m3 p
    地址线(如A0~A25)1 L! \4 F& W/ b; v* K4 `
    数据线(如D0~D15), n, a$ k, Y6 [+ o' y9 V  W) Q
    写信号(WE,即WR)
! v) i8 f5 h1 c4 Q7 q# t) L6 m% j  l& T    读信号(OE,即RD)1 m) ~) J* M: g7 o/ C! {! e8 J
    片选信号(CS)
- H% [) V1 y% a( ], @. `    若SRAM支持字节控制,还有UB/LB信号。
+ P  q/ |: F+ i! O  U* U
3 s/ l: ?0 A: j  C) V7 f上一节提到的TFTLCD信号,RS、D0~D15、WR、RD、CS、RST和BL等% ~" y( T7 r2 H5 n; {5 h  w0 v3 D* Q

( s8 P) u; k5 `9 B$ M, q! |; F$ g其中真正操作LCD时用到的就只有:: D) ~" n. X& Z6 J  L
    数据&命令:RS
6 ~: M( X+ u2 w    数据线0~D15
% o) _9 k% u; z* h+ m; t    写信号:WR
6 ]# \5 b) A+ g% j% F: Y+ t    读信号:RD! r" z  Z0 i; n! |1 n* z/ F
    片选信号:CS9 c) P( V. q$ D+ z1 A: }  g! R/ Y

$ W: d* b( L7 N" \& }; l6 R: |操作时序和SRAM控制类似,唯一不同是TFTLCD有RS信号,但是没有地址信号" x3 C4 M0 h  G. f8 [  q

( @# b% c6 b5 Z1 D1 k8 U  mTFTLCD通过RS信号来决定传送是数据还是命令,可以理解为一个地址信号 2 p& a* z1 A9 S! o# F% B) B: p
将RS接到FSMC地址线A10(A0-A25随意),TFTLCD就被当做一个SRAM使用 5 \# F8 \+ S& u2 O9 y
这样TFTLCD成为只有一个地址的SRAM设备,从而实现FSMC驱动TFTLCD
% }7 Y4 J6 W7 A8 T0 |8 u
! @: a7 ?8 |/ d2 L4 R三,FSMC存储块8 q$ f$ V9 \5 W; C: [& r( p
STM32的FSMC支持8/16/32位数据宽度,我们使用的LCD为16位,所以设置选择16位
' f- `3 a. t. lFSMC的外部设备地址映像:STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块& p2 b7 g/ a% Q

7 z' N+ K& E9 G% M 2.jpg , [  K' i, K, e, t9 k7 W/ J. z, n
7 w( i1 n7 I$ Y7 m3 U7 e
如图:
3 _$ y- m" K3 W8 c# J/ K; v    FSMC分为4块,每块256M字节又被划分为4*64,即四个片选; ?5 i2 s8 T# S, z
    NOR / PSRAM使用块1,共256M
$ h/ n0 c6 n3 x% ?$ |9 o    NAND闪存使用块2,3,共512M5 t4 R1 ~7 U; m4 t& q+ c
    PC卡使用块4,共256M
7 h! ]) X# w# x& e2 T! |& k: y
' `" D- f7 V3 [' m# O) n- |3 S所以我们使用NOR PSRAM驱动TFTLCD
' ], f! e- A, v- J7 v# C* m- ~. O4 B& K" g
四,存储块1(Bank1)寄存器介绍4 m6 l2 R$ ]/ j' k
STM32的FSMC存储块1(Bank1)用于驱动NOR FLASH/SRAM/PSRAM 9 r: ~1 Q! i$ o- F: ~
Bank1被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。 - m9 C5 `- l- z1 }: g! H  r
Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。 这里HADDR,是内部AHB地址总线
5 }/ }: b$ H$ L3 x7 J0 Q2 V7 W9 lHADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。
, A% E# d8 L+ E8 Q7 B
4 w6 `3 P: E3 A+ D如下图所示:" x8 j/ Q0 s$ Q5 {6 h

3 m& y1 B6 O6 I+ t; [ 3.jpg 7 P1 Y  r; K& @" K" j
5 [& f# K; J1 K$ A
说明:
6 C* z  _% U( ]! G$ c     HADDR[27:26]是不可手动配置的,当选择所在区后会自动赋值7 F4 M) W0 [: \1 v6 v7 d
3 t9 c5 M( [8 Q3 {5 V3 f5 y0 x
注意:
: ~* Z/ A  x0 ]" f' _' C/ g  o1 J* ^     1,当Bank1接 8位宽度存储器时:HADDR[25:0] -> FSMC_A[25:0]
# F3 V3 F: v' m& U0 J  D     2 添加当Bank1接16位宽度存储器时:HADDR[25:1] -> FSMC_A[24:0]对应关系的进一步解释 5 u. U7 y3 b3 Z, g3 b- f6 L# U, J
       添加寄存器FSMC_BTRx为读时序控制,FSMC_BWTRx为写时序控制
# a5 P$ M$ `1 ?/ M9 }+ B, w8 i, O+ B7 H9 a1 C9 X' l
        由于内部每个地址对应一个字节,外部设备16位宽,FSMC的一个地址对应两个字节* G# R' M/ n0 f9 S
        即:4 V3 `5 ^- X5 q& |& `& w( {
             0000对应FSMC_A[0]=0   (2字节)
; Q2 i. Z: w% M' D             0010对应FSMC_A[0]=1   (2字节)0 m5 y' d' W+ [9 x- a* I. }
             0100对应FSMC_A[1]=1   (2字节)& [& U/ ?! z: ?, k0 t9 L: ~
7 ^" b* v' r5 s# K9 n+ F$ i' _
        所以对应关系需要除以2,内部右移一位对齐
' ~4 D0 O1 u% b, X8 l. q        此时最低位没用,访问最低位需要使用UB/LB5 q" w8 I+ p6 }5 k
9 \  L: T) F* K! ~% Z3 ^9 D$ K. w/ i
     不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]
' o( j. M* g6 s
7 a0 k2 O. T" F9 E2 }五,存储块1(Bank1)模式A读写时序
) G3 i, Z: {4 {" l1 Y9 [STM32的FSMC存储块1支持的异步突发访问模式 5 y5 _4 r* l: e/ j7 T* \+ I
包括模式1,模式A~D等多种时序模型,驱动SRAM一般使用模式1或模式A
: {$ L. g0 i6 z8 h. k$ y, ]9 Q我们使用模式A驱动LCD(当做SRAM使用),模式A支持读写时序分开设置
. @$ R& p* A; S& F! a; v3 X
- O9 f7 e' A+ {8 v上一篇说的LCD时序,我们知道,LCD的读写耗时是不同的.写快读慢 . Y! V7 d2 \! i
这里采用模式A,针对不同的速度,做不同的设置
/ K* O4 j5 K  ]/ m  r) V1 Z" ^; E: C3 Z, y; l
模式A读时序:1 p* `' s" P: F' z+ d8 A

+ H6 x$ h* U% s1 i! q 4.jpg
, C+ B- k& W8 K/ d* n1 e% Q0 d3 N$ x. E: @
模式A写时序:
5 k+ B  x% o6 V+ ?% `( H3 v5 D
7 r* ?! k( H6 k& D0 d4 |% E 5.jpg
( t# C- g0 Y4 j
  n! {- E1 D" k. k7 o  |' [6 `2 A5 DILI9341时序-读写高低电平最小持续时间:$ l+ J7 t) q* {' O
3 c. G  E. e7 B# t" a: S7 t
6.jpg 7 @$ H$ H% {+ M0 V; @
0 M8 A; ?' ?( H1 I0 R. e4 \) u/ R0 }- s3 h
根据ILI9341时序读写高低电平最小持续时间来配置模式A的读写时序5 e, L& p& v+ P4 l* s! }
6 b0 d. [& U) H& U
六,FSMC相关寄存器介绍; I% I" W) n' L) \" i
对于NOR FLASH/PSRAM控制器-存储块1,可通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。 : T, o. s- O/ E9 Q7 Q
通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。2 P7 s3 U- l5 U6 c; z( e2 p
  J$ J3 f/ [5 S/ o; U  n- V
1,SRAM/NOR闪存片选控制寄存器(FSMC_BCRx)
4 J* p' v+ E* S1 X, L
$ M6 ~, m$ p* A  D" j 7.jpg ' N* B4 e( a( }- ~; q

/ _7 g/ o$ R0 n9 i; ]' j2 UEXTMOD:* |$ \0 f& I1 S3 d
     扩展模式使能位,控制是否允许读写不同的时序,需设置为12 ^# m0 i! D( `& @! O' l' M( b
WREN:
3 W- q5 k8 U# \7 e$ ^" g9 U# y6 ~! i     写使能位。我们要向TFTLCD写数据,需设置为10 E; P& g) i9 {) ^/ ^
MWID[1:0]:% y3 [0 Q9 V' G2 c3 y' [
     存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。
! A& v5 J2 A4 N2 D) `% `, t     我们的TFTLCD是16位数据线,需设置WMID[1:0]=01。
0 k5 b3 T& A  Y% aMTYP[1:0]:. I- S) Q, `/ r# y, j
     存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。
2 ?! g6 t4 K1 W! Q8 P4 _" K     我们把LCD当成SRAM用,需设置MTYP[1:0]=00。
, t( f# H3 Y" ^5 d8 ]5 gMBKEN:: `) B4 n: p0 D+ D% b  l) f# K
     存储块使能位。需设置为1
* P- i/ B2 t! Y% d- X$ z, Y' q  F) w4 ]' ^) [
2,SRAM/NOR闪存片选时序寄存器(FSMC_BTRx)-读时序控制
1 j0 Y- }- T) I- f2 {6 w2 U
, ?) {( w; T$ i% u 8.jpg 7 {2 c  J% E& r! t4 s5 y
! G7 ?5 y" U8 I  o7 n' }
ACCMOD[1:0]:
! q/ X: ]6 o' V& z     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。2 i' Q% s, @5 b- K
     我们使用模式A,需设置为00
! ~, l) ?9 x/ i0 vDATAST[7:0]:
* ^2 r4 z" l2 X  w3 G  p+ k     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。
# {; K& F/ Z: R2 @     对于ILI9341相当于RD低电平持续时间,最大355ns
+ Y" e5 }. E" m% T. |+ n     对于STM32F1,一个HCLK=13.8ns (1/72M),设置为15,相当于16个HCLK=220.8,加上STM32F1的FSMC性能较低一些,配置为15即可2 I4 Y6 X/ v3 @! k& r; q
     对于STM32F4,一个HCLK=6ns(1/168M) ,设置为60(360)。1 m8 j' ?! }+ `* e
ADDSET[3:0]:0 q3 a. b" w2 C, }' O, {
     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大为15。5 f4 r( E, d0 B; A
     对ILI9341来说,这里相当于RD高电平持续时间,为90ns。/ f2 k) o/ |3 e( }
     STM32F1的FSMC性能较低,即便设置为0,RD也有190ns高电平,所以设置为1
" x' W9 W- X6 o& O     STM32F1设置为150 j" F1 [" ]6 V5 m0 f! p

) _6 a* R4 ]' o" M注意:0 {* e2 t/ Y' U
     如果未设置EXTMOD位,则读写共用FSMC_BTRx时序寄存器
% T/ O' S) f  N& R! F2 Y4 q/ j' C! p+ o6 N9 R5 Z4 j2 q( b5 }
3,SRAM/NOR闪存写时序寄存器(FSMC_BWTRx)-写时序控制0 ?% B, v% a9 a4 N; _% F
8 A% }( V5 w7 l; ?. \4 D" S, ?
9.jpg / m7 K( \! Q1 e: @
* U/ m- p  ]; O' s/ K) k8 G: g# g  K
ACCMOD[1:0]:
! z* \" q& S, ?/ X& W" o1 T     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
' j; ^  h% z& ~4 @) q, nDATAST[7:0]:
4 r, m1 T& E2 j     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。) |, S" V+ I4 \" D# J  Z2 a5 h
     对ILI9341来说,其实就是WR低电平持续时间,为15ns,不过ILI9320等则需要50ns。8 `3 V# f; M* w' v8 N; y# P, S) R9 B
     考虑兼容性,对STM32F1一个HCLK=13.8ns (1/72M),设置为3(4*13.8=55.2);( |8 Z! [* N+ |% y: M; i
     对STM32F4,一个HCLK=6ns(1/168M) ,设置为9(9*6=54)。
7 {7 \4 d$ e* k6 p2 UADDSET[3:0]:3 D9 J6 W, e# R8 F. n
     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大值为1111 = 15。
  T1 {2 o, o$ E- z$ s% x     对ILI9341来说,这里相当于WR高电平持续时间,为15ns。
3 F% S$ l# ?2 ^! G     考虑兼容ILI9320,STM32F1即便设置为1,WR也有100ns高电平,所以设置为1。) i: i' k) Z9 I/ B+ j4 y
     而对STM32F4,则设置为8(9*6=54)
7 ?( x. J- H2 w. E; P3 c$ k- k: V2 U& j. i9 m* W
七,寄存器组合说明
) K; h' A  A0 {/ \# ]ST官方库寄存器定义中并没有FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等单独寄存器 0 ]) `! [+ ]9 s) j+ X& D8 a+ V
而是将他们进行了一些组合。规律如下:
+ ~9 G' l+ \! i8 ^: q. q8 B* j8 r/ D9 ?( D# J
FSMC_BCRx和FSMC_BTRx,组合成BTCR[8]寄存器组,他们的对应关系如下:
$ E  I8 A  X* K9 ~6 e7 z" Q# V; }- U3 f! Y+ q( L! }. E
BTCR[0]对应FSMC_BCR1,BTCR[1]对应FSMC_BTR1" k8 N; A+ i4 M! D
BTCR[2]对应FSMC_BCR2,BTCR[3]对应FSMC_BTR22 S! N) T8 V% R: @4 g5 X" ], t
BTCR[4]对应FSMC_BCR3,BTCR[5]对应FSMC_BTR3; X5 {, M7 `) K, }/ }& M
BTCR[6]对应FSMC_BCR4,BTCR[7]对应FSMC_BTR4( r, }: g1 B1 U+ D0 h

' ?/ W$ M; a( `! hFSMC_BWTRx则组合成BWTR[7],他们的对应关系如下:
. {& s6 c1 i4 Q/ a9 m( p2 K% L% O$ ^: E8 g6 X& @
BWTR[0]对应FSMC_BWTR1,4 y5 X! X, V" A2 n3 ?; W
BWTR[2]对应FSMC_BWTR2,
6 d) o7 K" G8 t2 FBWTR[4]对应FSMC_BWTR3,
1 l; W0 [+ h% }6 Y$ G: @4 V9 @* GBWTR[6]对应FSMC_BWTR4,* ?4 y' F/ e+ l( X
BWTR[1]、BWTR[3]和BWTR[5]保留7 w$ G  a' s4 ^( G, E

6 v! w' R8 O; A9 I; h$ T7 ^( s; ~/ u6 H2 z1 \

9 A% P. u( L# j
3 b+ y. a0 [. M+ |转载自BraveWangDev
( M& S  }, k2 I; M. }: k1 i% C& ?  o0 s& O! T' ?9 B! J
赞 收藏 1 评论1 发布时间:2018-5-28 13:58

举报

1个回答
czhstm 回答时间:2019-10-3 20:51:03
买了野火的学习板,只有库文件方式FSMC控制,我想要寄存器方式控制
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版