ST意法半导体
直播中

张涛

7年用户 1283经验值
私信 关注
[问答]

如何编写STM32H7A3ZIT6Q闪存加载器/驱动程序?

我有一块带有 STM32H7A3ZIT6Q 的定制板。它具有连接到 OCTOSPI1 引脚的 MT25TL256 NOR 闪存。
我正在尝试编写闪存加载程序/驱动程序。
在我们的应用程序中,我们不需要从该闪存执行代码。我们只需要它来获取数据。但是,如果有一种方法可以使执行工作,那也很好。
到目前为止,这是我想通的:
MCU 时钟频率为 270MHZ。
预分频器设置为 4(寄存器中的值为 3),因此 MT25TL256 在 DTR 模式下的时钟频率为 90MHz。
片选高电平时间 (CSHT) 很难找到,但由于所有类似的时序都 <= 5ns 这等于 1 个时钟周期,因此设置为 1
我们的 MCU 是带有 SMPS 的 Q 变体,因此并非 OCTOSPI2 的所有引脚都可用。


这是我正在努力解决的问题:
在 AN5050 Rev 7 的表 4 中,它表示闪存必须连接到 OCTOSPI2,但我们的连接到 OCTOSPI1。
在 DS13195 Rev 8 的表 1 中,它表示 nor flash 仅在多路复用模式下不受直接支持。
在 AN5050 Rev 7 的图 10 中,多路复用模式可视化。在此图中,存储器 2 连接到 OCTOSPI1,其 CSn 引脚 (S#) 连接到 OCTOSPI2。
在 RM0455 Rev 9 的表 6 中,NOR 闪存似乎可以映射到 OCTOSPI1(我假设第一个地址用于 OCTOSPI1),但“从不执行”设置为是,因此无法执行。

由于我们的内存有 CSn 连接到 OCTOSPI1 而不是两个,我想知道我们是否可以让它工作,有或没有执行支持,而无需更改硬件。
所以我的问题是:
1)我们可以在不改变硬件的情况下让这个芯片工作吗?如果,那又怎样?
2) 我应该为 FifoThreshold 使用什么值?



回帖(1)

衡辉

2023-2-3 11:20:10
我找到了这个错误。调试器不会硬重置处理器,因此 FLASH 芯片的重置线不会切换。FLASH 芯片仍处于四通道模式。解决方案是在四模式和单模式下简单地重置芯片。
我还改进了驱动程序结构,因此我可以启用丢弃未使用的部分 (-Wl,--gc-sections):


  •         //trick compiler not to discard unused functions and data with option Discard unused sections (-Wl,--gc-sections)
  •         volatile bool useUnused = false;
  •         volatile unsigned long DeviceSize;

  •         if (useUnused)
  •         {        DeviceSize = StorageInfo.DeviceSize;
  •                 UNUSED(DeviceSize);
  •                 SectorErase(0, 0);
  •                 MassErase();
  •                 Write(0,0,NULL);
  •                 CheckSum(0, 0, 0);
  •                 Verify(0,0,0,0);
  •         }

举报

更多回帖

发帖
×
20
完善资料,
赚取积分