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

stm32f777 单片机 lcd 显示与 nand flash 读写冲突 ?

[复制链接]
hpdell 提问时间:2017-4-18 17:00 /
stm32f777 单片机 lcd 显示与 nand flash 读写冲突 ?
是不是 lcd 与 nand 不能够同时使用啊 ???

具体如下:
nand flash 写数据时 影响 LCD 屏显示 ???

单片机 : stm32f777

正常显示的图片如下:

lcd0.jpg


在对 nand flash 写操作时的显示如下:

lcd1.jpg

lcd2.jpg


对 nand flash 读操作时目前还没有发现有问题。

时序设置如下:

  1. 对nand flash 时序设置如下:

  2. void MX_FMC_Init(void)
  3. {
  4.   FMC_NAND_PCC_TimingTypeDef ComSpaceTiming;
  5.   FMC_NAND_PCC_TimingTypeDef AttSpaceTiming;
  6.   FMC_SDRAM_TimingTypeDef SdramTiming;

  7.   hnand1.Instance = FMC_NAND_DEVICE;

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

  38.   #endif
  39.   
  40.   hnand1.Init.EccComputation = FMC_NAND_ECC_DISABLE;  // FMC_NAND_ECC_ENABLE;  // FMC_NAND_ECC_DISABLE;              //禁止ECC
  41.   
  42.   if (HAL_NAND_Init(&hnand1, &ComSpaceTiming, &AttSpaceTiming) != HAL_OK)
  43.   {
  44.     Error_Handler();
  45.   }


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

  71.   if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  72.   {
  73.     Error_Handler();
  74.   }
  75. }
复制代码


收藏 2 评论6 发布时间:2017-4-18 17:00

举报

6个回答
SInzo 回答时间:2017-7-3 08:32:45
本帖最后由 SInzo 于 2017-7-3 08:34 编辑

不会有这种情况。可以先试着检查下fmc配置,加长读取间隔时间

NAND FLASH之所以会有影响可能是因为读写期间,对fmc影响?个人猜测

评分

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

查看全部评分

jcx0324 回答时间:2017-7-3 09:05:31
会不会出现while(1)死循环等待了

评分

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

查看全部评分

无薪税绵 回答时间:2017-7-3 10:04:04
这个不是IO共用,导致冲突的问题吗?

评分

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

查看全部评分

shuolang126 回答时间:2017-7-3 10:44:55
都用到F7系列了,没有用过呢
trucy 回答时间:2017-7-3 16:20:50
没有用过
wolfgang2015 回答时间:2017-7-3 17:22:33
应该是属于片选没控制好。
不应该出现这种问题。

评分

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

查看全部评分

所属标签

相似问题

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