单片机学习小组
登录
直播中
张波
7年用户
1387经验值
私信
关注
使用FSMC驱动LCD以及数据线偏移怎么解决?
开启该帖子的消息推送
单片机
嵌入式
SST89单片机
使用FSMC驱动LCD以及数据线偏移怎么解决?
回帖
(1)
白旭蕊
2022-2-17 11:59:42
FSMC的理解
使用FSMC功能将8080接口的LCD当外部RAM来使用(数据传给LCD时没经过内部SRAM,所以一帧图片很大也可以直接传),根据STM的地址分配图可以看出外部RAM的地址由0x60000000开始到0x9FFFFFFF结束,一共1G内存,将其平分为了4个块,每个块256M字节,其中每个块的时序不同来支持多种外部存储器。8080接口的LCD时序和第一块的时序相接近,第一个块里面又分为4个区,每个区大小为64M字节,都有独立的寄存器对所连接的存储器进行配置,每个区的32位地址中的低28位[27:0]不同,其中的高位[27:26]是来区分4个区的,低位[25:0]有个名字叫HADDR[25:0],外部RAM的地址就是通过HADDR[25:0]来给的,可是LCD写数据之后其内部地址是自动递增的,所以不需要发地址给LCD,则地址线目前不使用,8080接口与FSMC的第一个块的接口之间的差别只有一个数据/命令线和地址线,所以我们可以使用地址线中的一根线来代替数据/命令线,然后通过FSMC给不同的地址写数据来改变地址线上的那根数据/命令线的高低电平,达到读写数据或者读写命令的要求,在通过FSMC给地址时,地址就是按区的地址或上被改变的其中一根地址线(数据/命令线),来决定FSMC的时序和数据或命令。
这是将外部RAM地址分为4个块的图:
这是将第一个块分为4个区的图:
关于A0对齐A1或者A0对齐A2的问题:
这是FSMC驱动LCD的规定:
这是三星公司的ARM芯片s3c2440与1片128KB的SRAM芯片的连接原理图:
初学者可能会有几个疑问,为什么SRAM芯片的A0地址引脚连接的是ARM芯片的A1引脚呢?那什么情况下SRAM芯片的A0连接ARM芯片的A0引脚呢?
首先,我们分析一下图中的 SRAM芯片,该芯片有A0-A15一共16根地址线,有D0-D15一共16根数据线,故其存储空间为 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB
我们知道,要寻址 128KB 需要 17 根地址线(128 = 2^17 ),然而SRAM芯片的地址引脚却只有16根,ARM端该如何给地址线呢?
由图可以看出,SRAM芯片的数据总线是16位宽,即一次传输2个字节的数据。因此,我们可以这样理解,即一个地址空间其实对应着2个字节的数据,实际上真正的寻址空间只有64KB而已,16根地址线足够。这样ARM端并不需要将17根地址线全部连接到SRAM芯片上,只需要给出高16位地址(A1~A16),然后,SRAM芯片即根据这16根地址找到对应的地址空间,将该地址空间的2个字节发送到数据总线上,然后ARM端根据未连接到SRAM芯片的A0的电平,来决定具体是取高字节,还是低字节。
由这些分析可以推出一个规律,即 ARM端的地址线到底是 A0 、A1 还是 A2 连接 存储芯片的 A0,取决于存储系统的数据总线位宽,如果是 8位则A0->A0,如果是16位则A1->A0,如果是32位则A2->A0。(这段话这在别处看到搬过来的)
8080接口
/*******************
CS:片选
WR:写使能
RD:读使能
D[15:0]:16位双向数据线
RST:复位
RS(DC):命令/数据(0读写命令,1读写数据)
*******************/
FSMC接口
/*******************
地址线:A0-A18
数据线:D0-D15
写信号:WE
读信号:OE
片选信号:CS
*******************/
FSMC的理解
使用FSMC功能将8080接口的LCD当外部RAM来使用(数据传给LCD时没经过内部SRAM,所以一帧图片很大也可以直接传),根据STM的地址分配图可以看出外部RAM的地址由0x60000000开始到0x9FFFFFFF结束,一共1G内存,将其平分为了4个块,每个块256M字节,其中每个块的时序不同来支持多种外部存储器。8080接口的LCD时序和第一块的时序相接近,第一个块里面又分为4个区,每个区大小为64M字节,都有独立的寄存器对所连接的存储器进行配置,每个区的32位地址中的低28位[27:0]不同,其中的高位[27:26]是来区分4个区的,低位[25:0]有个名字叫HADDR[25:0],外部RAM的地址就是通过HADDR[25:0]来给的,可是LCD写数据之后其内部地址是自动递增的,所以不需要发地址给LCD,则地址线目前不使用,8080接口与FSMC的第一个块的接口之间的差别只有一个数据/命令线和地址线,所以我们可以使用地址线中的一根线来代替数据/命令线,然后通过FSMC给不同的地址写数据来改变地址线上的那根数据/命令线的高低电平,达到读写数据或者读写命令的要求,在通过FSMC给地址时,地址就是按区的地址或上被改变的其中一根地址线(数据/命令线),来决定FSMC的时序和数据或命令。
这是将外部RAM地址分为4个块的图:
这是将第一个块分为4个区的图:
关于A0对齐A1或者A0对齐A2的问题:
这是FSMC驱动LCD的规定:
这是三星公司的ARM芯片s3c2440与1片128KB的SRAM芯片的连接原理图:
初学者可能会有几个疑问,为什么SRAM芯片的A0地址引脚连接的是ARM芯片的A1引脚呢?那什么情况下SRAM芯片的A0连接ARM芯片的A0引脚呢?
首先,我们分析一下图中的 SRAM芯片,该芯片有A0-A15一共16根地址线,有D0-D15一共16根数据线,故其存储空间为 2^16 * 16 bit = 2^17 * 8 bit = 2^17 byte = 128KB
我们知道,要寻址 128KB 需要 17 根地址线(128 = 2^17 ),然而SRAM芯片的地址引脚却只有16根,ARM端该如何给地址线呢?
由图可以看出,SRAM芯片的数据总线是16位宽,即一次传输2个字节的数据。因此,我们可以这样理解,即一个地址空间其实对应着2个字节的数据,实际上真正的寻址空间只有64KB而已,16根地址线足够。这样ARM端并不需要将17根地址线全部连接到SRAM芯片上,只需要给出高16位地址(A1~A16),然后,SRAM芯片即根据这16根地址找到对应的地址空间,将该地址空间的2个字节发送到数据总线上,然后ARM端根据未连接到SRAM芯片的A0的电平,来决定具体是取高字节,还是低字节。
由这些分析可以推出一个规律,即 ARM端的地址线到底是 A0 、A1 还是 A2 连接 存储芯片的 A0,取决于存储系统的数据总线位宽,如果是 8位则A0->A0,如果是16位则A1->A0,如果是32位则A2->A0。(这段话这在别处看到搬过来的)
8080接口
/*******************
CS:片选
WR:写使能
RD:读使能
D[15:0]:16位双向数据线
RST:复位
RS(DC):命令/数据(0读写命令,1读写数据)
*******************/
FSMC接口
/*******************
地址线:A0-A18
数据线:D0-D15
写信号:WE
读信号:OE
片选信号:CS
*******************/
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
嵌入式
SST89单片机
请问用
FSMC
驱动
LCD
,地址
线
电平会变化对外设有影响吗
2019-01-25
1207
怎样使用
FSMC
去
驱动
LCD
呢
2021-10-21
1247
如何学习
fsmc
?
2020-07-24
1071
FSMC
是如何
驱动
4.3寸80并口TFT
LCD
的
2021-10-19
1913
FSMC
和
LCD
的控制究竟是什么关系?
2020-05-14
2660
请问
FSMC
被
LCD
NAND SRAM复用时怎么走
线
?
2019-03-07
2723
请问横线处A10的
偏移
量是怎么来的?
2019-11-06
1808
硬件改动
LCD
屏
数据线
为8,linux内核应该怎么修改?
2022-01-11
653
请问stm32
fsmc
的控制信号和地址
数据
信号中,没有使用的部分可以作为其他用途吗?
2019-06-21
1087
FSMC
模块的应用有哪些呢?
FSMC
模块是由哪些部分组成的
2022-02-21
1345
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分