OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6156|回复: 4

F4中用FSMC驱动TFTLCD的模式选择及时序问题

[复制链接]

2

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2019-9-17
在线时间
61 小时
发表于 2019-11-6 09:51:03 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 ukoikk 于 2019-11-6 22:14 编辑

学习用的LCD是4.3寸的TFTLCD,采用NT35510驱动,数据手册中,读写时序如下 NT35510_R_W_TIMING.png
在例程中,对FSMC的模式选择,都是用的模式A。

A-R

A-R
Mode_A_WR_TIMING.png 在模式A中,A[25:0]使用其中1个作为数据、指令选择,NBL不用,NEX片选,NOE用于RD,NWE用于WR,D[15:0]数据线。
其他模式,如模式C:
Mode_C_RD_TIMING.png Mode_C_WR_TIMING.png 在C模式中,不用NADV,其他的时序就和模式A相同。
或者模式D:
Mode_D_RD_TIMING.png Mode_D_WR_TIMING.png 在D模式中,不用NADV,其他的时序就和模式A相同。

问题1:是否可以用模式C和模式D取代模式A?毕竟不考虑NADV/NBL的话,那么其他的时序都是符合NT35510的8080并口时序。

问题2:如果不行,那么是不是说,即使时序相同,不同的模式也不能互相替代使用,而是有专门的运用地方?可以详细解释吗?



视频例程中,主要是以2.8寸的TFTLCD讲解,驱动是ILI9341。9341的时序图如下,
ILI9341_R_W_TIMING.png
对照FSMC模式A的时序,在模式A中,是先ADDSET后DATAST,其中ADDSET周期内,NOE(用于RDX)是高电平,在DATAST周期内,NOE(用于RDX)是低电平。
而9341时序中,RD的时序是先低电平,后高电平。
问题3:模式A的NOE(用于RDX)电平,是先高后低,9341的RD是先低后高,所以模式A是怎么应用于9341的?
问题4:在视频中讲到,ADDSET的建立时间,“对 ILI9341 来说,这里相当于 RD 高电平持续时间,为 90ns”,图中有提到trdhfm和trdh都是90ns,在图中的时序图都是在右边。所以这里的问题,也可以归类到问题3中,高低电平为什么与模式A颠倒还能用?是哪个时序图错了?还是我理解错了?







我用的是4.3寸TFTLCD模块,驱动IC是NT35510,时序图如下:
NT35510_RW_TIMING.png
问题4中提到“对 ILI9341 来说,这里相当于 RD 高电平持续时间,为 90ns”,所以对于NT35510的ADDSET的时间,也是RD的高电平时间,也就是trdh/trdhfm,图框中的ttrdh的是90ns,trdhfm的是250ns。

下面是例程中关于时间参数的设置,按视频中讲解,2.8寸的TFTLCD时序中(驱动是ILI9341),trdh/trdhfm=90ns,所以可以6*15=90ns,所以  readWriteTiming.FSMC_AddressSetupTime = 0XF。

  readWriteTiming.FSMC_AddressSetupTime = 0XF;         //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns       
  readWriteTiming.FSMC_AddressHoldTime = 0x00;         //地址保持时间(ADDHLD)模式A未用到       
  readWriteTiming.FSMC_DataSetupTime = 60;                        //数据保存时间为60个HCLK        =6*60=360ns
  readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  readWriteTiming.FSMC_CLKDivision = 0x00;
  readWriteTiming.FSMC_DataLatency = 0x00;
  readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //模式A


问题5:在驱动IC35510中,trdh=90ns,trdhfm=250ns,1/168M=6ns,而250ns/6ns=42,远远超过了15,而  readWriteTiming.FSMC_AddressSetupTime 这最大存15,而这个例程也能正常点亮屏幕。为什么例程的建立时间(15)远小于时序要求(42)也能点亮屏幕?例程中也未发现第二个地方对FSMC_BTRx赋值的地方了。

求教!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-2-3
在线时间
6 小时
发表于 2021-3-11 14:47:22 | 显示全部楼层
同问,求回答!!!!
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2021-3-25
在线时间
28 小时
发表于 2021-7-30 17:30:13 | 显示全部楼层
帮顶
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-7-31 08:59:44 | 显示全部楼层
我在使用f429的时候 时钟是192M 时序直接全填成了0 一样可以驱动
回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2021-7-31 09:00:16 | 显示全部楼层
WriteFmc_Tim.FMC_AddressSetupTime = 0;
                WriteFmc_Tim.FMC_AddressHoldTime = 0;
                WriteFmc_Tim.FMC_DataSetupTime = 1;
                WriteFmc_Tim.FMC_BusTurnAroundDuration = 0;
                WriteFmc_Tim.FMC_CLKDivision = 0;
                WriteFmc_Tim.FMC_DataLatency = 0;
                WriteFmc_Tim.FMC_AccessMode = FMC_AccessMode_A;
                FMC_NORSRAMInitStructure.FMC_Bank               = FMC_Bank1_NORSRAM2;
                FMC_NORSRAMInitStructure.FMC_DataAddressMux     = FMC_DataAddressMux_Disable;
                FMC_NORSRAMInitStructure.FMC_MemoryType         = FMC_MemoryType_SRAM;
                FMC_NORSRAMInitStructure.FMC_MemoryDataWidth    = FMC_NORSRAM_MemoryDataWidth_16b;
                FMC_NORSRAMInitStructure.FMC_BurstAccessMode    = FMC_BurstAccessMode_Disable;
                FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low;
                FMC_NORSRAMInitStructure.FMC_WrapMode           = FMC_WrapMode_Disable;
                FMC_NORSRAMInitStructure.FMC_WaitSignalActive   = FMC_WaitSignalActive_BeforeWaitState;
                FMC_NORSRAMInitStructure.FMC_WriteOperation     = FMC_WriteOperation_Enable;
                FMC_NORSRAMInitStructure.FMC_WaitSignal         = FMC_WaitSignal_Disable;
                FMC_NORSRAMInitStructure.FMC_ExtendedMode       = FMC_ExtendedMode_Disable;
                FMC_NORSRAMInitStructure.FMC_WriteBurst         = FMC_WriteBurst_Disable;
                FMC_NORSRAMInitStructure.FMC_ReadWriteTimingStruct = &WriteFmc_Tim;
                FMC_NORSRAMInitStructure.FMC_WriteTimingStruct     = &WriteFmc_Tim;
                FMC_NORSRAMInit(&FMC_NORSRAMInitStructure);  
                FMC_NORSRAMCmd(FMC_Bank1_NORSRAM2, ENABLE);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 09:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表