nand flash 写数据时 影响 LCD 屏显示 ???
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个BANKhsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3; //CAS为3hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;//失能写保护hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2; //SDRAM时钟为HCLK/2=216M/2=108M=9.3nshsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE; //使能突发hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1; //读通道延时
// MT48LC32M16 -75 ITSdramTiming.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.如果都采用DMA方式传输数据,影响不大;2.如果没有采用DMA方式与其他大量也访问存储区用总线的的模块会有延时影响;3.如果各个模块都采用中断方式,影响与2.差不多;4.如果发生地址交盖,一定影响显示部分结果。 一般来说lcd部分是不影响的,因为你的nand FLASH又不是用来作为显存器,因此在这一情况下,存储速度与否不对LCD产生影响,建议检查线路。 明显是因为操作FLASH的时间过长,因中断导致LCD刷屏时的时序出现问题。所以建议一定要用DMA进行数据操作处理。使某些功能在后台执行,不占用CPU的时间。 学习了 刷屏不是DM2D刷的吗? 是与SDRAM冲突? nand flash 的硬件连线和LCD是否存在共用关系? 难道有管脚共用了? 无薪税绵 发表于 2017-6-27 21:43
难道有管脚共用了?
nand flash 与 sdram 有些数据引脚是共用的,与 lcd 引脚木有共用的
估计应该就像 2楼版主分析的那样吧
页:
[1]