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

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

[复制链接]
hpdell 提问时间:2017-4-5 10:15 /
nand flash 写数据时 影响 LCD 屏显示 ???

单片机 : stm32f777

正常显示的图片如下:
11.jpg

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

13.jpg
对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();
  }
}
收藏 1 评论8 发布时间:2017-4-5 10:15

举报

8个回答
zhjb1 回答时间:2017-6-27 08:37:14
影响显示分及格反面:1.如果都采用DMA方式传输数据,影响不大;2.如果没有采用DMA方式与其他大量也访问存储区用总线的的模块会有延时影响;3.如果各个模块都采用中断方式,影响与2.差不多;4.如果发生地址交盖,一定影响显示部分结果。

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

arenas 回答时间:2017-6-27 09:08:53
一般来说lcd部分是不影响的,因为你的nand FLASH又不是用来作为显存器,因此在这一情况下,存储速度与否不对LCD产生影响,建议检查线路。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

hjl2832 回答时间:2017-6-27 09:38:59
明显是因为操作FLASH的时间过长,因中断导致LCD刷屏时的时序出现问题。所以建议一定要用DMA进行数据操作处理。使某些功能在后台执行,不占用CPU的时间。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

lulugl 回答时间:2017-6-27 09:50:42
学习了
jcx0324 回答时间:2017-6-27 13:05:17
刷屏不是DM2D刷的吗? 是与SDRAM冲突?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

shuolang126 回答时间:2017-6-27 15:09:04
nand flash 的硬件连线和LCD是否存在共用关系?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-6-27 21:43:12
难道有管脚共用了?
hpdell 回答时间:2017-6-28 12:28:42
无薪税绵 发表于 2017-6-27 21:43
难道有管脚共用了?

nand flash 与 sdram 有些数据引脚是共用的,与 lcd 引脚木有共用的

估计应该就像 2楼版主分析的那样吧

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版