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

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

[复制链接]
aimejia 发布时间:2018-5-28 13:58
一,FSMC简介
1 t" i8 k3 K0 c! `FSMC:灵活的静态存储控制器
2 t6 P* s  ]1 u) X能够与同步或异步存储器和16位PC存储器卡连接- e8 X0 h/ f* \9 k* M
STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器
2 u, X( F; M9 b; I- b0 X) wSTM32 407和103是不支持SD RAM的,429,439支持SD RAM操作
- ?( G4 Z: V* R3 J' g& }( H1 o. a; \* p' C% U+ j1 Q
二,FSMC驱动LCD原理
# N# T% R/ S8 [; e& i. I; A 1.jpg 0 F3 X# k" I* E" k" T  ~1 e
- F; g/ A' l# ^" m$ u
FSMC驱动外部SRAM(LCD被当做SRAM)
0 K  E/ ]8 S6 q* U- n  G8 k$ N2 _1 J1 s" r* F& n$ C
SRAM控制包含:+ c  r7 f2 R& u6 }/ {) A
    地址线(如A0~A25)/ T) p& R7 k$ Y) c7 O
    数据线(如D0~D15)" {' l7 K) W. Q' C
    写信号(WE,即WR)
; s' O. A$ D% v9 r/ j+ `( @    读信号(OE,即RD)
$ [+ @* |4 T, D& x4 y    片选信号(CS)8 H9 [9 D; M6 S5 `
    若SRAM支持字节控制,还有UB/LB信号。8 N; E" A8 I% I

* ]# V/ W! {* r6 T& ]/ `2 `上一节提到的TFTLCD信号,RS、D0~D15、WR、RD、CS、RST和BL等
0 b1 u! O" Y: ]) q0 G3 M
2 y/ _" v# E% g/ E5 w8 Z其中真正操作LCD时用到的就只有:9 E& H4 t2 C% ~6 q3 H
    数据&命令:RS
) |. \( j  _* k( M# q0 t, R6 T/ |    数据线0~D15
) s& f5 g! K4 O4 E: M    写信号:WR8 @' {3 d3 J. P( M  _1 S5 y# v
    读信号:RD( l7 g5 Z$ o; ~2 \
    片选信号:CS
5 x. N. N3 H4 @4 H
, j6 w% o6 J* \. w3 C- A操作时序和SRAM控制类似,唯一不同是TFTLCD有RS信号,但是没有地址信号% N$ A3 [: H+ ]6 Q/ G3 g
- A5 i9 ~* o7 R2 V) T7 c
TFTLCD通过RS信号来决定传送是数据还是命令,可以理解为一个地址信号
9 f7 ]& e$ n  m1 n- S# S将RS接到FSMC地址线A10(A0-A25随意),TFTLCD就被当做一个SRAM使用
; d; F7 q7 v$ O( }这样TFTLCD成为只有一个地址的SRAM设备,从而实现FSMC驱动TFTLCD: a* S- {$ w; M) j

$ A% P) d; e3 `3 t三,FSMC存储块0 b1 Z+ \6 X0 Q
STM32的FSMC支持8/16/32位数据宽度,我们使用的LCD为16位,所以设置选择16位
* L( ?# ?: P! kFSMC的外部设备地址映像:STM32的FSMC将外部存储器划分为固定大小为256M字节的四个存储块
( ^+ x* f. n( s* U3 M! ?7 O+ ]% \9 @7 F, M1 o* m+ n& @
2.jpg
$ [1 q( p) ?! }4 l' V
3 `+ j/ b$ K# o8 n4 w如图:
! S. F9 P: H& {    FSMC分为4块,每块256M字节又被划分为4*64,即四个片选/ q8 R2 b4 V( i1 r1 n9 O* Q( D
    NOR / PSRAM使用块1,共256M7 h; l: k. ]8 p
    NAND闪存使用块2,3,共512M" w3 G5 r! ^% U. \, f' U
    PC卡使用块4,共256M
/ a4 j! F/ y9 M1 H) G/ N8 r/ G" V
4 w) a7 I: y. Q  y& A3 {3 D6 w所以我们使用NOR PSRAM驱动TFTLCD' B8 `9 I# o5 C, I0 [! m7 k
  }* p/ U- `' K( F9 m
四,存储块1(Bank1)寄存器介绍
  Y& [2 ~# v) ~$ F4 m+ \5 k1 q- HSTM32的FSMC存储块1(Bank1)用于驱动NOR FLASH/SRAM/PSRAM
: x. o  ~) L$ I$ G8 |# t+ {Bank1被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。
2 j" d  e0 h! R% U! j# p+ W/ ^Bank1的256M字节空间由28根地址线(HADDR[27:0])寻址。 这里HADDR,是内部AHB地址总线
9 J8 |4 L+ D+ C! THADDR[25:0]来自外部存储器地址FSMC_A[25:0],而HADDR[26:27]对4个区进行寻址。
$ N2 i4 b  j, z7 x
$ i! S" J: O: ]: R) J5 r如下图所示:
& V+ L+ n# g+ u
: v, D/ f1 o& `1 d2 A) F 3.jpg + A3 N$ z' S. {
& S! B6 B; e# Y  q8 e0 U) ~
说明:
) P$ H5 A2 s; T0 d7 j4 o- f     HADDR[27:26]是不可手动配置的,当选择所在区后会自动赋值/ e7 \1 B5 w: t6 _
0 R% {4 p; c) b* k$ M
注意:9 w7 ?7 M7 y- r
     1,当Bank1接 8位宽度存储器时:HADDR[25:0] -> FSMC_A[25:0]- _! z: ]( y$ p( i( d% z* N% l
     2 添加当Bank1接16位宽度存储器时:HADDR[25:1] -> FSMC_A[24:0]对应关系的进一步解释 / |+ f' ^2 G( X6 Z, e
       添加寄存器FSMC_BTRx为读时序控制,FSMC_BWTRx为写时序控制  \6 {3 ]* k! ~3 O; v& n

  C  @+ Y% V/ q9 D# R) d3 \  O! C        由于内部每个地址对应一个字节,外部设备16位宽,FSMC的一个地址对应两个字节+ A! y8 n  b) j& R5 z0 q! P
        即:
, `- g8 h% F5 D% @4 ?: V  D, k1 b             0000对应FSMC_A[0]=0   (2字节)
8 y! T, N7 Q/ b% P+ c* F! I             0010对应FSMC_A[0]=1   (2字节). ]" @! N* @8 m+ n1 E* }
             0100对应FSMC_A[1]=1   (2字节)4 C5 [( {8 H  `1 n& T1 ~
( b  \6 }7 K/ L! B( d7 w+ _; k; f1 k; k
        所以对应关系需要除以2,内部右移一位对齐2 g0 j3 {( Q) u5 @% @+ x, ]
        此时最低位没用,访问最低位需要使用UB/LB+ N) u$ d/ N) y6 z! x5 _# K

( K7 V8 _- R: F     不论外部接8位/16位宽设备,FSMC_A[0]永远接在外部设备地址A[0]
# w# A; g3 o' _8 f% s
' ]7 `3 e+ c3 n+ b五,存储块1(Bank1)模式A读写时序" e  \( N- D& [8 ^7 U* Q* y
STM32的FSMC存储块1支持的异步突发访问模式
% I& s6 L5 ]6 v5 m/ ]8 e包括模式1,模式A~D等多种时序模型,驱动SRAM一般使用模式1或模式A 7 b. D0 p; s" e2 N* _
我们使用模式A驱动LCD(当做SRAM使用),模式A支持读写时序分开设置
3 x3 b  z/ Z: ]" b- A: U# O) I8 y- O+ g3 o* C
上一篇说的LCD时序,我们知道,LCD的读写耗时是不同的.写快读慢
1 f9 b4 Y$ D0 t+ j% S  F这里采用模式A,针对不同的速度,做不同的设置
3 H" W7 K% t) _; Q, v$ |; x: C* t  ?) B
模式A读时序:
% B& o' f9 u# ?( g/ ]) E' ]: `! j7 O; u2 E) {' J* G; Z
4.jpg 2 {6 O& `+ Y0 l0 a7 [2 z: A
0 w- Z- b$ M% b/ Q" Y
模式A写时序:% b9 r- E; z* D- A

# N, N" E& s0 c 5.jpg
, v0 \! b, L  V5 G$ h) r' P# r! E
ILI9341时序-读写高低电平最小持续时间:% S/ P9 s0 E9 K2 p* u% M

$ v! m; Z% k0 C0 r) _) u, N 6.jpg
* i( }8 k1 s, k, W9 P! R
$ r' A/ `$ v2 g  Y6 d根据ILI9341时序读写高低电平最小持续时间来配置模式A的读写时序* k3 l  I. i9 O7 ~! f3 X7 v/ o8 `
, {% x  [5 x+ q" r
六,FSMC相关寄存器介绍: r3 w* ?# b+ I) @- R
对于NOR FLASH/PSRAM控制器-存储块1,可通过FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器设置(其中x=1~4,对应4个区)。 6 i8 W3 @7 T: A6 D% F, E# T7 b( T
通过这3个寄存器,可以设置FSMC访问外部存储器的时序参数,拓宽了可选用的外部存储器的速度范围。- |* |- q7 }9 {3 r+ Z: Y6 I

6 H7 l; x/ S: _: M2 ]1,SRAM/NOR闪存片选控制寄存器(FSMC_BCRx)  }+ j5 `. H: ?  h% B0 p

2 L2 T) p7 z1 D) G; | 7.jpg 3 C, ]4 v4 @5 m
/ U% ]: D2 A4 L! n9 \+ g
EXTMOD:! T/ _! S- F' \8 O% Z2 {1 P
     扩展模式使能位,控制是否允许读写不同的时序,需设置为1
5 y1 h$ u; w; {! p" K# iWREN:+ ^0 _! X$ \" q  {1 u5 F
     写使能位。我们要向TFTLCD写数据,需设置为19 J* V' D/ k; B1 I! V& D
MWID[1:0]:
& f! J1 w- W5 X- Y' m     存储器数据总线宽度。00,表示8位数据模式;01表示16位数据模式;10和11保留。% i' h' {0 y& l
     我们的TFTLCD是16位数据线,需设置WMID[1:0]=01。
. t! r, Y' ~: GMTYP[1:0]:! u, h( G2 n$ F2 b* K
     存储器类型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。- ^# w5 Q7 X3 s7 i4 L9 |
     我们把LCD当成SRAM用,需设置MTYP[1:0]=00。6 T. g. v) a5 W$ _
MBKEN:0 O; V- e. @7 V6 m2 L, T" e3 d& Q
     存储块使能位。需设置为1
* F: t- k  I9 \) `. I# H# B/ l' E6 s
2,SRAM/NOR闪存片选时序寄存器(FSMC_BTRx)-读时序控制5 _" f# k8 ~, s0 |4 D

' \1 [! q- g( C 8.jpg 1 j% A1 c! x9 q" t9 F

# m! a/ W1 \9 ^2 Q$ P  kACCMOD[1:0]:' H4 z5 [& \  r
     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
' F/ o/ o7 L! _. h4 p     我们使用模式A,需设置为00
( T) ]3 h! C. p0 w& x/ W: t" E1 QDATAST[7:0]:
( i) s4 w, Y* T: Z6 p3 p     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。2 s. {: ?6 h$ q2 i/ P* K
     对于ILI9341相当于RD低电平持续时间,最大355ns
, F4 d5 f! W/ h$ z     对于STM32F1,一个HCLK=13.8ns (1/72M),设置为15,相当于16个HCLK=220.8,加上STM32F1的FSMC性能较低一些,配置为15即可. a2 S0 j! s8 z/ {# X
     对于STM32F4,一个HCLK=6ns(1/168M) ,设置为60(360)。+ e7 k. b' K; Q' O$ _7 F3 E
ADDSET[3:0]:7 s7 A9 U2 H+ y% c
     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大为15。
- {  i! ^9 Y' V( Z5 |5 M3 s* S& T" V: E     对ILI9341来说,这里相当于RD高电平持续时间,为90ns。( u! h) w0 |) N2 i
     STM32F1的FSMC性能较低,即便设置为0,RD也有190ns高电平,所以设置为1. V( W% G# O" X8 l0 @6 N1 }
     STM32F1设置为15
) T" i( W. F" |) @; G: d7 k. {% K
4 R  M5 X7 R3 j) }5 x8 K注意:
- n7 k; t7 L" `     如果未设置EXTMOD位,则读写共用FSMC_BTRx时序寄存器
. x* L6 x  W7 d7 F3 y) W8 J8 u; m6 E" N$ O
3,SRAM/NOR闪存写时序寄存器(FSMC_BWTRx)-写时序控制: w8 w" C- h% `" W! g

- e+ M; T4 u' R/ Z* V6 A1 W0 p 9.jpg
' u& [, U/ \! L( h" L1 ]7 G; |+ O/ X) Q+ Z8 I: ~( I- R! ?8 ~
ACCMOD[1:0]:
8 Z" H. }2 K  N/ T8 ~     访问模式。00:模式A;01:模式B;10:模式C;11:模式D。
% q. Q, r/ S; o. ]& q' P* }- @$ WDATAST[7:0]:( ~" J! g' A9 t& O. l
     数据保持时间,等于: DATAST(+1)个HCLK时钟周期,DATAST最大为255。
5 Z2 D/ c) W1 i0 f  ?% a; Z2 R     对ILI9341来说,其实就是WR低电平持续时间,为15ns,不过ILI9320等则需要50ns。4 [6 r5 y9 j! k/ i) m# o' `  H# ^# N
     考虑兼容性,对STM32F1一个HCLK=13.8ns (1/72M),设置为3(4*13.8=55.2);
+ v( L. T6 T  B  Q/ y     对STM32F4,一个HCLK=6ns(1/168M) ,设置为9(9*6=54)。
2 N7 A+ ^5 l# Z. N! {& t, EADDSET[3:0]:5 X: w9 o  r: M, q4 C
     地址建立时间。表示:ADDSET+1个HCLK周期,ADDSET最大值为1111 = 15。- P! R8 _% I& ^( V( R7 l2 M% M
     对ILI9341来说,这里相当于WR高电平持续时间,为15ns。
" ]' Y* n+ |3 L. `( g     考虑兼容ILI9320,STM32F1即便设置为1,WR也有100ns高电平,所以设置为1。/ l$ V( x( D; c8 h  O$ e
     而对STM32F4,则设置为8(9*6=54)2 M. P/ u* I; D# V# u, J( B3 c* O: h

& R+ J! V, g1 K& b2 u3 N七,寄存器组合说明3 G" X) m  ]* |: L- d( M
ST官方库寄存器定义中并没有FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等单独寄存器 2 V0 p- Z, S5 Z! q
而是将他们进行了一些组合。规律如下:
7 R. p9 @" T3 Y& o
4 _7 q2 g1 ]7 T# S$ v2 bFSMC_BCRx和FSMC_BTRx,组合成BTCR[8]寄存器组,他们的对应关系如下:1 m, R7 k: g6 J5 _- b! L' Q

1 D1 r% Q+ {5 q% O1 L0 QBTCR[0]对应FSMC_BCR1,BTCR[1]对应FSMC_BTR1
4 h" ^$ F9 t0 K0 D$ lBTCR[2]对应FSMC_BCR2,BTCR[3]对应FSMC_BTR2
3 }* d/ z" N, G) mBTCR[4]对应FSMC_BCR3,BTCR[5]对应FSMC_BTR3
* }) r" t5 y* i8 Z; }0 W$ a4 ]% n. u2 ABTCR[6]对应FSMC_BCR4,BTCR[7]对应FSMC_BTR41 R5 c1 U# L8 V! C+ v8 g

6 b1 G7 n; N( \3 l5 gFSMC_BWTRx则组合成BWTR[7],他们的对应关系如下:3 m/ ]+ m- j  h7 J

0 [) [  H& h: M5 dBWTR[0]对应FSMC_BWTR1,
8 B- ]8 u) y& p8 O) n7 \BWTR[2]对应FSMC_BWTR2,! b! k  v3 p* X9 w4 ^
BWTR[4]对应FSMC_BWTR3,, W; A6 X, O0 B5 z/ {0 o. Y
BWTR[6]对应FSMC_BWTR4,
6 q8 Q1 b* E" F* I3 FBWTR[1]、BWTR[3]和BWTR[5]保留# X( O; `/ o4 l* d$ g

7 _; g0 H( d4 s0 m* D6 F) H
- C! B' `6 }, y% u
1 R' _. \9 j4 X4 _& ~" s3 _5 m& b1 u0 {4 x$ N
转载自BraveWangDev
7 m: X( y! Q( Y: t7 w( R: y* H0 T& Q% k4 Q/ L: |# |. W
收藏 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 手机版