搜索
bottom↓
回复: 21

nand flash 写数据时 影响 LCD 屏显示 ???

[复制链接]

出0入0汤圆

发表于 2017-4-4 20:24:31 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2017-4-5 10:05 编辑

nand flash 写数据时 影响 LCD 屏显示 ???

单片机 : stm32f777

正常显示的图片如下:




在写nand flash 时,影响 LCD 显示的效果如下:





对nand flash 时序设置如下:

void MX_FMC_Init(void)
{
  FMC_NAND_PCC_TimingTypeDef ComSpaceTiming;
  FMC_NAND_PCC_TimingTypeDef AttSpaceTiming;
  FMC_SDRAM_TimingTypeDef SdramTiming;

  hnand1.Instance = FMC_NAND_DEVICE;

  hnand1.Init.NandBank = FMC_NAND_BANK3;
  hnand1.Init.Waitfeature = FMC_NAND_PCC_WAIT_FEATURE_DISABLE;    //关闭等待特性
  
  hnand1.Init.MemoryDataWidth = FMC_NAND_MEM_BUS_WIDTH_8;     
  hnand1.Init.ECCPageSize = FMC_NAND_ECC_PAGE_SIZE_2048BYTE;   // FMC_NAND_ECC_PAGE_SIZE_512BYTE;       //ECC页大小为1024字节
  
  #if    0   // 测试使用 使用这个设置 速度很慢很慢
    hnand1.Init.TCLRSetupTime = 0xa1;  /* CLE低和RE低之间的延迟,HCLK周期数 */
   
    hnand1.Init.TARSetupTime = 0x29;   /* ALE低和RE低之间的延迟,HCLK周期数 */
      
    ComSpaceTiming.SetupTime     =  0xf5; // 1;  0xf5;;   //建立时间 资料介绍最少10ns  
    ComSpaceTiming.WaitSetupTime =  0xf3;  // 3; 0xf3;  //等待时间
    ComSpaceTiming.HoldSetupTime =  0xf2; // 1;  0xf2;   //保持时间
    ComSpaceTiming.HiZSetupTime  =  0xf5; // 1;  0xf5;   //高阻态时间
   
  #else   // 目前使用的是这个设置,在读写 nand flash 时,影响显示, ??????????????????????????????????????????
   
    // 1/216MHz = 4.62962962962963 ns
   
    hnand1.Init.TCLRSetupTime = 0x12;         // 0x13,  0xa1;  CLE低和RE低之间的延迟,HCLK周期数 这个设置的速度 也是很慢,但基本可以读写 ,但会影响到 LCD 显示问题 ??????????????
    hnand1.Init.TARSetupTime = 0x18;           // 0x19   ALE低和RE低之间的延迟,HCLK周期数
    ComSpaceTiming.SetupTime     =  7;          // 8   //建立时间 资料介绍最少10ns
    ComSpaceTiming.WaitSetupTime =  15;     // 16  //等待时间  tADL
    ComSpaceTiming.HoldSetupTime =  8;      // 8   //保持时间
    ComSpaceTiming.HiZSetupTime  =  9;      // 8   //高阻态时间
    AttSpaceTiming.SetupTime     =  ComSpaceTiming.SetupTime;
    AttSpaceTiming.WaitSetupTime =  ComSpaceTiming.WaitSetupTime;
    AttSpaceTiming.HoldSetupTime =  ComSpaceTiming.HoldSetupTime;
    AttSpaceTiming.HiZSetupTime  =  ComSpaceTiming.HiZSetupTime;   

  #endif
  
  hnand1.Init.EccComputation = FMC_NAND_ECC_DISABLE;  // FMC_NAND_ECC_ENABLE;  // FMC_NAND_ECC_DISABLE;              //禁止ECC
  
  if (HAL_NAND_Init(&hnand1, &ComSpaceTiming, &AttSpaceTiming) != HAL_OK)
  {
    Error_Handler();
  }


  // ====================================================================================================================
  
  /** Perform the SDRAM1 memory initialization sequence   sdram 读写目前完全没有问题
  */
  hsdram1.Instance = FMC_SDRAM_DEVICE;
  /* hsdram1.Init */
  hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
  hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_10;       //列数量
  hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;             //行数量
  hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32;          //数据宽度为32位
  hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;     //一共4个BANK
  hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;                  //CAS为3
  hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;  //失能写保护
  hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;              //SDRAM时钟为HCLK/2=216M/2=108M=9.3ns
  hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;                   //使能突发
  hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;               //读通道延时
  
  // MT48LC32M16 -75 IT
  SdramTiming.LoadToActiveDelay = 2;            // 2CLK  , 资料要求的时间, 加载模式寄存器到激活时间的延迟为2个时钟周期
  SdramTiming.ExitSelfRefreshDelay = 9;         // 75ns  , 资料要求的时间, 退出自刷新延迟为9个时钟周期
  SdramTiming.SelfRefreshTime = 5;              // 44ns  , 资料要求的时间, 自刷新时间为5个时钟周期
  SdramTiming.RowCycleDelay = 7;                // 66ns  , 资料要求的时间, 行循环延迟为7个时钟周期
  SdramTiming.WriteRecoveryTime = 3;            // 1CLK + 7.5ns  , 资料要求的时间, 恢复延迟为2个时钟周期
  SdramTiming.RPDelay = 2;                      // 20ns  , 资料要求的时间,行预充电延迟为2个时钟周期
  SdramTiming.RCDDelay = 2;                     // 20ns  , 资料要求的时间, 行到列延迟为2个时钟周期

  if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  {
    Error_Handler();
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-4-4 20:34:53 来自手机 | 显示全部楼层
时间吧?要不每个任务完成至少不干别的事,独占

出0入0汤圆

 楼主| 发表于 2017-4-4 22:04:17 | 显示全部楼层
本帖最后由 hpdell 于 2017-4-5 09:55 编辑
bg6agf 发表于 2017-4-4 20:34
时间吧?要不每个任务完成至少不干别的事,独占


现在还没有上系统 喔 !!

目前也还没有搞明白到底是什么原因造成的,如果时序调快了,那么在读写大数据量时就会出错,

如果时序搞的很慢,读写大数据量就不会出错(比如一次读写 8MByte  的数据量测试),

出0入0汤圆

发表于 2017-4-4 22:11:51 来自手机 | 显示全部楼层
不用系统也可以…关中断吧

出0入0汤圆

 楼主| 发表于 2017-4-5 09:53:22 | 显示全部楼层
bg6agf 发表于 2017-4-4 22:11
不用系统也可以…关中断吧

你好,你的意思是 在对 nand flash 写入数据时,把整个系统中断全部关闭 ??

出0入0汤圆

发表于 2017-4-5 10:29:49 | 显示全部楼层
hpdell 发表于 2017-4-5 09:53
你好,你的意思是 在对 nand flash 写入数据时,把整个系统中断全部关闭 ??  ...

这只是一个测试方法。用这种方法祸害或者类似的方法就能知道并隔离故障产生的原因。。自己去想。不说 了。

出0入0汤圆

发表于 2017-4-6 23:08:53 | 显示全部楼层
Nand和刷屏有脚位共用????

出0入0汤圆

发表于 2017-4-7 00:42:50 来自手机 | 显示全部楼层
dma或内存带宽不够了

出0入0汤圆

发表于 2017-4-7 07:33:15 来自手机 | 显示全部楼层
OneRain 发表于 2017-4-6 23:08
Nand和刷屏有脚位共用????

是因为总线占用的问题,显存在sdram,读sdram和写nand就冲突了

出130入20汤圆

发表于 2017-4-7 08:01:57 | 显示全部楼层
9楼正解,显存是在DRAM中的,所以相当于和NAND共用了外部存储的总线,这种现象是正常的,想办法避免一下

出0入0汤圆

发表于 2017-4-7 08:25:48 来自手机 | 显示全部楼层
nand写入扇区时很快,但是固化数据需要几个毫秒时间,所以你把查询busy的过程放在最前面再试试,也就是写完扇区后立即退出函数。

出0入0汤圆

发表于 2017-4-7 09:55:53 | 显示全部楼层
查查PCB布线,看看写nand的时候对LCD的线有干扰不?

出0入0汤圆

 楼主| 发表于 2017-4-7 10:19:07 | 显示全部楼层
rtems 发表于 2017-4-7 09:55
查查PCB布线,看看写nand的时候对LCD的线有干扰不?

nand flash的pcb布线在左边,而 lcd 显示的pcb 布线在右边,应该可以排除这个pcb 布线的影响了,

在 对 nand flash 写入数据时,lcd 屏貌似是没有进行操作的,应该也不会出现 对 nand flash 进行操作,同时又去访问 sdram 的情况吧 ??!!!!

出0入0汤圆

发表于 2017-4-7 10:25:05 | 显示全部楼层
感觉不像是强抢占CPU或者CPU不够的因素,看图片是显示乱掉了,如果是抢占总线或者CPU不够用,应该是现实慢,而不是完全乱掉,内容错了。
你写nand的代码没有写入到显存里面去吧?

出0入0汤圆

 楼主| 发表于 2017-4-7 12:25:38 | 显示全部楼层
rtems 发表于 2017-4-7 10:25
感觉不像是强抢占CPU或者CPU不够的因素,看图片是显示乱掉了,如果是抢占总线或者CPU不够用,应该是现实慢 ...

没有啊,数据缓存是使用单片机内部的 ram

出0入0汤圆

发表于 2017-4-18 15:46:23 | 显示全部楼层
我也遇到一样的问题,是否有解决的办法呀

出0入0汤圆

 楼主| 发表于 2017-4-18 16:13:43 | 显示全部楼层
本帖最后由 hpdell 于 2017-4-18 16:47 编辑
ljuneLCD 发表于 2017-4-18 15:46
我也遇到一样的问题,是否有解决的办法呀 ...


目前还没有,

我的 sdram 与 nand flash 低8bit 是共用的,而lcd 显示又需要 sdrma 发来刷新数据,估计是他们冲突了造成的,

但是我之前使用 fsmc lcd + nand flash 也没有遇到过这个问题啊,目前有的迷糊了,

不知道你有什么看法或者方法没有啊 ?????????

出0入0汤圆

发表于 2017-4-20 09:45:46 | 显示全部楼层
hpdell 发表于 2017-4-18 16:13
目前还没有,

我的 sdram 与 nand flash 低8bit 是共用的,而lcd 显示又需要 sdrma 发来刷新数据,估计 ...

是不是你以前的分辨率下,现在的分辨率要比以前使用的液晶屏的分辨率高了,占用的数据量变大了呢?

出0入0汤圆

 楼主| 发表于 2017-4-20 09:52:46 | 显示全部楼层
ljuneLCD 发表于 2017-4-20 09:45
是不是你以前的分辨率下,现在的分辨率要比以前使用的液晶屏的分辨率高了,占用的数据量变大了呢? ...

我现在的显示屏的分辨率是 800*1280 ,貌似是有些高啊,

难道是这个原因造成的 ??

出0入0汤圆

发表于 2017-5-4 14:49:58 | 显示全部楼层
hpdell 发表于 2017-4-20 09:52
我现在的显示屏的分辨率是 800*1280 ,貌似是有些高啊,

难道是这个原因造成的 ?? ...

问题解决了吗

出0入0汤圆

 楼主| 发表于 2017-5-4 16:49:34 | 显示全部楼层

目前还木有,

你目前也遇到类似的问题了吗 ???

有什么好的思路啊 ?

出150入135汤圆

发表于 2017-5-7 13:16:10 | 显示全部楼层
这么大的分辨率,应该是STM32内部总线带宽不够了,800*1280的分辨率时钟频率80几兆,数据量已经很恐怖
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 19:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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