stm32f777 单片机 lcd 显示与 nand flash 读写冲突 ?
是不是 lcd 与 nand 不能够同时使用啊 ???
具体如下:
nand flash 写数据时 影响 LCD 屏显示 ???
单片机 : stm32f777
正常显示的图片如下:
在对 nand flash 写操作时的显示如下:
对 nand flash 读操作时目前还没有发现有问题。
时序设置如下:
- 对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();
- }
- }
复制代码
|
不会有这种情况。可以先试着检查下fmc配置,加长读取间隔时间
NAND FLASH之所以会有影响可能是因为读写期间,对fmc影响?个人猜测
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
不应该出现这种问题。
评分
查看全部评分