技术 | OSPI Flash适配秘籍之移形换位大法

来源: 瑞萨嵌入式小百科 作者:Deane Xia 2025-09-16 13:44:46

继《OSPI Flash适配秘籍之内功心法篇》之后,本文将继续深入探讨如何将Winbond(华邦)W35T51NW OSPI Flash适配到你的系统[JX1] [DX2]中。笔者感谢老铁们对瑞萨嵌入式小百科的持续关注。如果有读者是第一次接触OSPI接口,笔者建议先跳转到内功心法篇,先修炼《内功心法篇》,否则直接上阵,怕是要走火入魔。

  
之前也说了广大不同厂家的OSPI Flash,虽然说大部分功能相似,大部分功能也可以复用,但是不同厂家的OSPI Flash还是存在或多或少的差别。因此如果客户出于成本的考虑,需要更换OSPI Flash的时候,是需要做驱动层的适配工作。

 

那如何做OSPI Flash的驱动的适配工作?请让笔者倾囊相授。

首先,不同门派(厂商)的OSPI Flash虽说套路相似,但细节上总有些“暗器”藏着。适配之前,务必翻阅芯片手册,了解其配置流程。尤其是从单线模式切换到八线模式时,稍有不慎,便会“变线”翻车。

  
一般OSPI Flash除了支持8线模式,默认都支持单线模式。所以一般Flash上电复位后,都默认支持单线的协议。单线模式下,大部分厂商的OSPI Flash,命令码以及命令-地址-数据之间的时延(如下时序图中的Latency field)差别较小,但是在八线模式下这些差别就不能忽视,下面笔者会具体说明。

图1.OSPI Read transaction时序图

OSPI Flash适配的关键在于从单线模式转换成八线模式的时候,如何正确通过单线指令完成转换。图2说明了Winbond W35T51NW OSPI Flash的具体的配置流程。不同厂商的Flash的初始化和配置流程是不一样的,尤其是涉及到输入输出模式的切换时,这也是移形换位大法的关键所在。

  
大多数厂家的Flash默认设置就是单线模式。所以如果只是适配单线模式的情况下,过程会简单很多。但是多线模式的适配注意事项会更多,也相对麻烦一些。

  
图2展示了W35T51NW设备的存储器读取操作流程,包括XIP(Execute-in-Place)模式和标准命令模式(Standard Command Mode)。以下是对该图的解析:

1.设备启动流程

设备上电后,会进行设备初始化并刷新易失性/内部配置寄存器(Volatile/Internal Configuration Register Refresh)。

 

配置寄存器的值,来自非易失性配置寄存器(Non-Volatile Configuration Register),决定设备是进入XIP模式还是标准命令模式

图2.W35T51NW Serial Flash初始化配置流程图

2.XIP模式(Execute-in-Place)

如果设备进入XIP模式,它会直接执行地址输入-数据输出序列,用于直接从闪存执行代码,无需额外的读取命令。

  
退出XIP模式需要将XMb设为1。(XMb是Non-Volatile      Configuration Register配置寄存器中的一位,由于XIP模式不是本篇文章的重点,这里不做过多的介绍)

3.标准命令模式(Standard Command Mode)

在标准命令模式下,需要按照命令-地址-数据输入/输出序列进行数据访问。

  
该模式可以支持不同的数据传输模式,包括:

SDR 3字节地址模式

SDR 4字节地址模式

Octal DDR 4字节地址模式

4.工作模式切换

在标准命令模式下,默认支持3字节地址模式,但可以通过B7h命令启用4字节地址模式。通过E9h命令可禁用4字节地址模式,切换回3字节地址模式

  
通过81h命令码写易失性配置寄存器(Volatile Config Reg)可以切换工作模式(从单线转到八线)

通过1s-1s-1s的协议向VCR(volatile Config Reg)寄存器用81h命令码写入E7h/C7h,可以把Flash的协议模式从1s-1s-1s切换成8d-8d-8d。不同的地址模式不影响协议模式的切换。Flash的工作模工切换成功后,紧接着要切换XSPI Master(ra8d1)这边的协议模式。

同样的如果要把Flash的协议模式从8d-8d-8d切回1s-1s-1s,此时需要用8d-8d-8d的协议通过81h命令码向VCR写入FFh/DFh。同样Flash的工作模工切换成功后,紧接着要切换XSPI Master(ra8d1)这边的协议模式。两边的协议要一致才能正常工作。

 

这里对VCR寄存器做一些说明,VCR寄存器共有00h-07h共8个地址。其中对00h地址通过81h命令码写入配置值就可以设置Flash的输入输出的协议模式。其它地址范围的配置功能请参考手册中的内容,默认情况下一般不会对其它地址的内容进行配置。

  
这里笔者还想说明一下,手册中除了VCR还有NVCR,这两者有什么区别呢?

  
NVCR的全称是Non-volatile Configuration Register为非易失性的寄存器,而VCR是易失性的寄存器,即下电之后VCR的内容将会重置为0。所以Flash在启动的时候会默认读取NVCR里面的配置作为默认启动配置,而VCR可以在启动之后再去配置,但是VCR的配置只存在当前的上电周期中生效。如果对Flash下电再上电VCR中的内容将失效。

  
总结一句话,如果开发者想对Flash的启动配置项永久生效就写NVCR,如果是临时调整配置就可以写VCR。

图3.Flash输入输出协议模式切换命令调用说明

下图让读者感性的认识一下,同样是通过85h命令码读取VCR的内容,示波器的波形会是什么样的?

 

左边是1s-1s-1s可以很清晰的看出85h这个命令码。右边由于示波器通道数有限,加上示波器信号质量也比较差,读者不能清晰的感知到85h这个命令码。但是通过黄色时钟信号通道,读者可以感受到八线的模式下,完成同样的读取VCR的操作所需要的时钟数量会少很多。

图4.读取VCR配置值的单线和八线输入输出波形对比图

5.复位

硬件复位(Hardware      Reset)会使设备重新进入上电初始化状态

  
软件复位(Software      Reset)通过66h+99h指令实现,会让设备回到上电后的初始状态。

  
其次开发者要注意8线输入输出模式,常用的读写擦写使能等指令,不同厂商的命令码可能稍有不同,并且“Latency field”也可能不同。

  
如下图5所示,在4字节地址模式下的快读取的指令,指令码是0Ch,其它的厂商就不一定也是0Ch。所以开发者要查看Flash手册里的指令列表,换Flash芯片需要适配新的指令。

  
此外对于Dummy cycle数值也可能不一样的,也就是前面提到的“Latency Field“。图5中的8(16)表示如果是SDR模式的话,Dummy cycle是8,如果是DDR模式的话,Dummy cycle值是16。

图5.Winbond W35T51NW OSPI Flash命令表说明

对于Dummy Cycle,在具体的波形图里以如下方式呈现:

图6.Fast Read with 4-Byte Address指令SDR时序图

笔者想强调一点的是在ODDR模式下,指令的长度变成两个字节。如下图所示,数据可以正常输出。

 

对于这个ODDR工作模式的指令长度要变成2字节的说明在Winbond的Flash使用手册上并没有明确说明。但是在ra8d1的手册上,37.2.2.7章节中有相关的寄存器配置说明。比如在ODDR模式下读取VCR的值的命令码是8585h,而不是85h,对应的command_length 也需要调整为2。

图7.RA8D1 OSPI command Type
图8.ODDR模式下读取VCR的值的代码示例

最后要注意不同厂家的OSPI Flash所对应的“Device ID”是不一样的。一般驱动代码里都会有读取&校验“Device ID”的操作,所以在驱动代码适配的时候“Device ID”值要从手册中找到对应的读取“Device ID“的指令和ID值。

  
总结来说做OSPI Flash适配要关注以下方面:

初始化的配置流程的差异;

模式切换时候的差异;

关注指令码和Dummy Cycle的差异;

以及Flash Device ID的差异。

 

需要技术支持?

  如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/

专题

查看更多
IC品牌故事

IC 品牌故事 | 三次易主,安世半导体的跨国迁徙

IC 品牌故事 | 开放合作+特色深耕,华虹的突围之路

IC 品牌故事 | Wolfspeed:从LED到SiC,被中国厂商围追堵截的巨头

人形机器人

市场 | 全球首家机器人6S店在深圳龙岗开业

方案 | Allegro解决方案助力机器人应用提升效率、可靠性和创新

方案 | 爱仕特SiC三电平方案:突破工商储能PCS高效极限

毫米波雷达

毫米波雷达 | 智能驾驶不可或缺的4D毫米波雷达技术全解析

毫米波雷达 | 有哪些热门毫米波雷达芯片和解决方案?

毫米波雷达 | 超百亿美元的毫米波雷达都用在了哪里?

0
收藏
0