hpdell 发表于 2017-4-18 17:00:35

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

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();
}
}

SInzo 发表于 2017-7-3 08:32:45

本帖最后由 SInzo 于 2017-7-3 08:34 编辑

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

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

jcx0324 发表于 2017-7-3 09:05:31

会不会出现while(1)死循环等待了

无薪税绵 发表于 2017-7-3 10:04:04

这个不是IO共用,导致冲突的问题吗?

shuolang126 发表于 2017-7-3 10:44:55

都用到F7系列了,没有用过呢

trucy 发表于 2017-7-3 16:20:50

没有用过

wolfgang2015 发表于 2017-7-3 17:22:33

应该是属于片选没控制好。
不应该出现这种问题。
页: [1]
查看完整版本: stm32f777 单片机 lcd 显示与 nand flash 读写冲突 ?