armink / SFUD

An using JEDEC's SFDP standard serial (SPI) flash universal driver library | 一款使用 JEDEC SFDP 标准的串行 (SPI) Flash 通用驱动库
MIT License
1.25k stars 444 forks source link

[FR]支持FastRead #88

Closed kaidegit closed 6 months ago

kaidegit commented 6 months ago

有些Flash在Read模式和FastRead模式下速率差距有点大,SFUD似乎没做FastRead的支持,可能会导致某些Flash跑不到满速

image image

kaidegit commented 6 months ago

https://github.com/armink/SFUD/pull/89

我简单地用宏实现了下切换,不过似乎JEDEC中能读到这个的信息,是否要根据JEDEC中的参数进行自动判断。如果用JEDEC的话FLASH_INFO_TABLE中估计得加点参数了。

armink commented 6 months ago

SFDP 中否有这个参数呢?如果有的话,那直接读取就更好了,这样也不用改 FLASH_INFO_TABLE 的

kaidegit commented 6 months ago

啊仔细看了下SFDP似乎只有多线读的时候的FastRead参数,单线的FastRead似乎没有

另外我说要在FLASH_INFO_TABLE加东西是因为如果从SFDP读了,不走JEDEC的设备也要有这个参所以要在table加😂

armink commented 6 months ago

我就怕不走 SFDP 的 FastRead 除了命令参数不一样,还有没有其他一些命令时序上的区别

如果基本都一样,那是可以考虑加到 FLASH_INFO_TABLE 里的

另外,未来更多的芯片其实是支持 SFDP 的,所以估计 SFDP 里如果能支持这个功能就更好了

kaidegit commented 6 months ago

PR还没合并,是我还需要补充什么吗

armink commented 6 months ago

FastRead 这套代码能兼容绝大多数的 NorFlash 吗?如果可以,能否大致给出已经确认的几款 Flash 型号,多谢~

作为通用的驱动,兼容性要求是需要优先考虑的

kaidegit commented 6 months ago

目前主要添加了使用0x0B指令作为快速读指令,并默认插入了一个dummy 我自己手上测试过的有W25Q32BV、XM25QH32CH、ZD25WQ80BT,这几个我当时应该看了手册没问题的 我检查了下其他的Flash的数据手册 P25Q40H image image GD25Q64E image W25Q128JV image ZD25Q32C image BY25Q128AS image ZB25VQ128 image IS25XP080D(这玩意的dummy似乎可以写寄存器配置,默认8bit对于SPI来说顶到了133M的上限,完全是足够的) image image MX25L25645G(这玩意的dummy也可以配置的,不过SPI只能8bit) image image

armink commented 6 months ago

看着还是挺标准的。在 sfud_cfg.h 中默认把 fast_read 开关注释掉,改完就可以合并了,多谢你的支持 👍

kaidegit commented 6 months ago

ok