打印

HK32F103VET6的FSMC读写nand存储器遇到的问题

[复制链接]
6831|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原来芯片是stm32f103vet6,替换上HK32F103VET6后读写K9F1208U0B不成功,但同总线上读写液晶屏(用的是FSMC的SRAM读写模块)没有问题。现附上原初始化程序。
void k9f1208_Init(void)
{
  FSMC_NANDInitTypeDef FSMC_NANDInitStructure;
  FSMC_NAND_PCCARDTimingInitTypeDef p;
  /*-- GPIO Configuration ------------------------------------------------------*/
  /* CLE, ALE, D0->D3, NOE, NWE and NCE2 NAND pin configuration */
  /*-- FSMC Configuration ------------------------------------------------------*/
        FSMC_NAND_GPIO_Init();
  p.FSMC_SetupTime = 0x1;//1
  p.FSMC_WaitSetupTime = 0x3;//3
  p.FSMC_HoldSetupTime = 0x2;//2
  p.FSMC_HiZSetupTime = 0x1;//1
  FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
  FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Enable;
  FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
  FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;
  FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
  FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;
  FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x00;
  FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
  FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;
  FSMC_NANDInit(&FSMC_NANDInitStructure);
  /* FSMC NAND Bank Cmd Test */
  FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
}

使用特权

评论回复

相关帖子

沙发
王金成|  楼主 | 2021-8-29 09:51 | 只看该作者
自己顶。

使用特权

评论回复
板凳
HSXP063| | 2021-8-30 08:23 | 只看该作者
可能是时序的问题,你把CACHE关一下

使用特权

评论回复
地板
王金成|  楼主 | 2021-8-30 14:34 | 只看该作者
HSXP063 发表于 2021-8-30 08:23
可能是时序的问题,你把CACHE关一下

请说具体一点,怎么操作,我比较过时序波形,发现读写脚的电平,使能端的电平波形都差不多,就是ALE和CLE(数据锁存和命令锁存,我分别用作数据和命令地址的选通)的电平有区别。

使用特权

评论回复
5
王金成|  楼主 | 2021-8-30 20:46 | 只看该作者
以下是读芯片ID时采集的波形,左上至右下分别为:RE,WE,CLE(A20),ALE(A19):
void FSMC_NAND_ReadID(NAND_IDTypeDef* NAND_ID)
{
  u32 data = 0;     
        GPIOC->BSRR =GPIO_Pin_14;
        GPIOC->BRR  =GPIO_Pin_14;
  *(vu8 *)(Bank_NAND_ADDR | CMD_AREA) = 0x90;
  *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;  
   data = *(vu32 *)(Bank_NAND_ADDR | DATA_AREA);  //从数据区0x70000000读回数据
   NAND_ID->Maker_ID   = ADDR_1st_CYCLE (data);
   NAND_ID->Device_ID  = ADDR_2nd_CYCLE (data);
   NAND_ID->Third_ID   = ADDR_3rd_CYCLE (data);
   NAND_ID->Fourth_ID  = ADDR_4th_CYCLE (data);  
         delay_us(1);
}
F:21IC/HK.png
F:21IC/ST.png

使用特权

评论回复
6
王金成|  楼主 | 2021-8-30 20:47 | 只看该作者
本帖最后由 王金成 于 2021-8-30 20:58 编辑

F:\21IC\HK.png如图,ST的可以读出正确的ID,航顺的读到都是0或者FF, 仔细观察,二者的读和写选择信号没有问题,感觉航顺的A20(CLE)和A19(ALE)波形明显不对。所以读不出正确的数据。

ST.png (927.74 KB )

STM32F103的各管脚波形

STM32F103的各管脚波形

HK.png (947.52 KB )

HK32F103的各管脚波形

HK32F103的各管脚波形

使用特权

评论回复
7
单片小菜| | 2021-9-1 08:28 | 只看该作者
毛刺是怎么回事?你想办法将毛刺去掉。

使用特权

评论回复
8
王金成|  楼主 | 2021-9-1 08:56 | 只看该作者
单片小菜 发表于 2021-9-1 08:28
毛刺是怎么回事?你想办法将毛刺去掉。

谢谢你的回复,那个不是毛刺,是一个时钟周期的窄脉冲,紫色的是我从其他脚输出的一个开始标志,100M的示波器速度不够所以看上去是尖刺。黄色的是地址选通锁存(ALE和CLE波形差不多),感觉问题就出在地址选通上,nand的ALE,CLE是高电平锁存,但示波器显示的波形明显是反了,它是平常高电平,拉低锁存了,这肯定是不对的;我看STM32的波形是正常的,平常是低电平,锁存时是标准的高定平脉冲,并且两个锁存信号有区别,我怀疑HK的FSMC和ST的不兼容。

使用特权

评论回复
9
勇敢的大白菜| | 2021-9-1 14:44 | 只看该作者
持续跟进一下这个帖子,了解到里面究竟有什么不同。

使用特权

评论回复
10
王金成|  楼主 | 2021-9-1 14:49 | 只看该作者
勇敢的大白菜 发表于 2021-9-1 14:44
持续跟进一下这个帖子,了解到里面究竟有什么不同。

谢谢跟帖,我晚点把液晶驱动的总线信号波形也发一下,感觉虽然液晶屏显示正常,但总感觉FSMC有点问题。

使用特权

评论回复
11
王金成|  楼主 | 2021-9-3 10:42 | 只看该作者
原本准备把液晶的地址选通信号图贴出来的,但怕图片导致帖子过长,先不贴了,不过,打包票,同样的程序,先后执行给液晶屏的某个点亮灭,再读K9F1208U0B的ID号,ST和航顺的波形不一样,区别很大。ST的液晶选通有电平变化,是正常的,但航顺的液晶选通线始终是低电平有效(就是其他读写不正常导致这个的地址选通没有变化过),不得不怀疑读存储器的FSMC总线没有工作或者是不正常工作,用到FSMC的还是请注意一下。

使用特权

评论回复
12
1737806855| | 2021-9-27 14:28 | 只看该作者
王金成 发表于 2021-9-3 10:42
原本准备把液晶的地址选通信号图贴出来的,但怕图片导致帖子过长,先不贴了,不过,打包票,同样的程序,先 ...

搞定了吗

使用特权

评论回复
13
SDLin| | 2021-9-29 11:28 | 只看该作者
王金成 发表于 2021-8-30 14:34
请说具体一点,怎么操作,我比较过时序波形,发现读写脚的电平,使能端的电平波形都差不多,就是ALE和CLE ...

在写了FLASH->AR寄存器后,操作FLASH->CR寄存器前执行 CACHE->CTL |= 0x0800 指令清一下 CACHE。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝