bondxie 发表于 2019-8-16 15:26:28

nand驱动程序跑飞问题求助

   420:   /* Send Read ID command sequence */   
0x08004114 2002      MOVS          r0,#0x02
0x08004116 F8820021STRB          r0,
   421:   *(__IO uint8_t *)((uint32_t)(deviceaddress | CMD_AREA))= NAND_CMD_READID;
0x0800411A 2090      MOVS          r0,#0x90
0x0800411C F4433480ORR         r4,r3,#0x10000
0x08004120 7020      STRB          r0,
   422:   *(__IO uint8_t *)((uint32_t)(deviceaddress | ADDR_AREA)) = 0x00;
   423:
   424:   /* Read the electronic signature from NAND flash */
   425: #ifdef FSMC_PCR2_PWID
0x08004122 2000      MOVS          r0,#0x00
0x08004124 F4433400ORR         r4,r3,#0x20000

请问各位大牛,FSMC的访问,到STRB这条指令就跑飞了,大概是什么问题?
配置和程序框架都是用stm32CubeMX生成的,nand的地址 0x7000 0000 。

eric2013 发表于 2019-8-16 16:42:57

方便的话,发下原理图和NAND的驱动代码

bondxie 发表于 2019-8-16 17:20:02

谢谢硬汉关注! 这是原理图。 软件就是用cubemx生成的,没有添加任何代码。只是测试驱动和硬件。

eric2013 发表于 2019-8-17 00:23:02

bondxie 发表于 2019-8-16 17:20
谢谢硬汉关注! 这是原理图。 软件就是用cubemx生成的,没有添加任何代码。只是测试驱动和硬件。

今天几个群友咨询了同样的问题,你看下是不是你的NAND命令地址,数据地址等搞错了

bondxie 发表于 2019-8-19 15:50:21

eric2013 发表于 2019-8-17 00:23
今天几个群友咨询了同样的问题,你看下是不是你的NAND命令地址,数据地址等搞错了

这是源代码,cube框架初始化后,复位nand,读取nandID,仿真时到FSMC操作就死机,地址都是cube自动生成的。为了防止硬件引起电源故障,我把flash芯片都取了。

eric2013 发表于 2019-8-20 09:00:37

先把这里面的时序参数改改,这个配置是无法运行的。

另外你当前仅配置了NCE3,那么操作的首地址是0x80000000,你确定下你的程序是不是

bondxie 发表于 2019-8-20 10:56:48

eric2013 发表于 2019-8-20 09:00
先把这里面的时序参数改改,这个配置是无法运行的。

另外你当前仅配置了NCE3,那么操作的首地址是0x8000 ...

flash的参数暂时没用到,所以我刚开始没配置,仅调用了这两个函数。
后来我配置了这些参数,故障依旧。我觉得就算我参数错了,只是结果不对,怎么会影响程序运行呢?
HAL_NAND_Reset(&hnand1);
HAL_NAND_Read_ID(&hnand1,&NandId);

仿真时,复位可以通过,读ID的两条指令就出错了,有时候提示不能访问0x.........处,有时候卡住后闪退。
并且下次不能进入下载或调试状态,板子断电后都不行。 必须拉低boot0后重启,才能重新下载和仿真。

我使用的是NCE2, BANK2, 首地址是0x7000 0000

eric2013 发表于 2019-8-20 11:04:44

bondxie 发表于 2019-8-20 10:56
flash的参数暂时没用到,所以我刚开始没配置,仅调用了这两个函数。
后来我配置了这些参数,故障依旧。 ...

如果ID还没有读取成功的话,就是查询你的时序配置和硬件问题了。

bondxie 发表于 2019-12-27 08:57:13

这个项目停了一段时间, 最近重新检查了一遍驱动配置. 找到问题了, CMSIS的驱动是查询方式判忙, 只需使能管脚.
页: [1]
查看完整版本: nand驱动程序跑飞问题求助