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

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个回答
arenas 回答时间: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
没有用过
wolfgang 回答时间:2017-7-3 17:22:33
应该是属于片选没控制好。
不应该出现这种问题。

评分

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

查看全部评分

所属标签

相似问题

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