使用FSMC驱动LCD以及数据线偏移的问题

1 篇文章 0 订阅
1 篇文章 0 订阅

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的规定:
关于A0对齐A1或者A0对齐A2的问题

这是三星公司的ARM芯片s3c2440与1片128KB的SRAM芯片的连接原理图:三星公司的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
*******************/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值