• flash芯片测试


       flash操作不同于sram,sram类似于在使用ram ip核(quartus/vivado)时生成的模块直接对存储操作,flash操作都是基于控制器的指令来的。flash在编程(写数据)之前是需要对芯片擦除(也就是写1),因为编程操作只能把1变成0,而不能把原本是0的位变成1。

       基本的命令:擦除命令/编程命令/读取命令(读取命令分为读取数据和读取寄存器)

       基本操作格式:命令+[地址]+[数据]       //地址和数据是可选的
      

       flash芯片擦除时按扇区来划分的;读取时一般芯片内部有一个buffer(大概几十个字节的大小),也就是说一般每次读取就是这个buffer的大小;program也是一样有一个buffer(具体的大小取决于各个芯片)。

       flash芯片还有一些写保护功能(本测试不做验证,测试主要这对操作接口)。

    -------------------------------------------------------------

       flash分类:

        并口flash

        串行flash

        norflash:容量小但速度快(这里的速度指读取的速度,尤其并口flash的读取和ram读取几乎没有区别)/一般用于存储系统,启动代码,bios之类

        nandflash:容量大但速度低于nor/一般用于应用存储数据

    -----------------------------------------------------------------

     测试使用的cypress的flash芯片:以S25FS128S/S25FS256S为例

    扇区划分模式,选择最简单的一种,便于操作:

      注意: 该芯片读取时可以一个字节一个字节自累加读取模式(可以一直读完整个芯片再回到地址0继续循环下去):

      另一种QuadIO  Read一定要burst模式,也就是只能一组一组读取,地址在组内累加循环。

      cypress的芯片一般都有模型可以下载:https://www.cypress.com/verilog/s25fs256s-verilog

      这个芯片有多种读写接口模式:命令+地址+数据

      1-1-1(默认模式/基本的spi模式)/1-4-4(QuadIO模式)/4-4-4(QPI模式)    

    【芯片读取数据时还可支持ddr操作,取决于具体的读取命令】

    【QPI模式和QuadIO模式的区别:两者都需要开启四线操作(CR1V[1]),但QPI模式还要开启(CR2V[6]);

       需要说明,CR2V[6]一旦assert会同时assert CR1V[1],CR1V[1] assert之后除非复位否则不会变为0】

      芯片的工作状态由4个8bits配置寄存器控制:CR1V/CR2V/CR3V/CR4V

     所有操作要通过SR1V状态寄存的查询结果作为判断成功结束的依据:

    -------------------------------------------------------------

      注意:spi模式io用了两个,qpi/quadio是4个。

      注意:片选信号csn需要提前且滞后时钟信号clk至少一个时钟周期。

    SDR 时序:

    DDR时序:

    关于写使能是否在每次的擦除、编写前都需要执行一次:

    虽然在寄存器定义里只说和WRENWRDI命令有关,但实际还是需要在每次执行擦写前进行一次写使能的。

    S25FS128S:

    S70FS01GS:

    -------------------------------------------------------------

    以对一个扇区的操作来验证flash芯片的基本功能,操作流程:

       1、上电延时(等待芯片复位)->

       2、设置工作模式(使能4字节模式)-> 1-1-1(SPI)

       3、读取配置寄存器的默认值(验证基本的读取功能及芯片的工作状态)-> 1-1-1(SPI)

       4、写入配置寄存器(需要注意此步骤之前需要先执行写使能操作/否则操作不成功)-> 1-1-1(SPI)

       5、在新配置的模式下读取芯片id(验证当前设置是否成功)-> 4-4-4(QPI)

       6、芯片指定扇区擦除-> 4-4-4(QPI)

       7、第一次读取验证-> 4-4-4(QPI/SDR)

       8、指定扇区编程->  4-4-4(QPI)

       9、指定扇区读取及验证-> 1-4-4(QaudIO/DDR)

       10、进入芯片低功耗模式(测试完成)(1-1-1/SPI)

    整个测试代码分为两部分:

      底层的接口驱动(完成读写时序)+测试状态机(完成测试流程)

    参考:

    https://www.cnblogs.com/liujinggang/p/9651170.html

  • 相关阅读:
    CPU爆满后的无助感
    JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控
    ES三节点重启后报错no known master node
    Docker service update更新不成功的问题
    Zookeeper通过四字命令基础监控(Zabbix)
    contab路径问题(脚本调用另一个文件)
    Python3报错:ModuleNotFoundError: No module named '_bz2'
    Kubernetes概念之deployment
    Python:__eq_和__str__函数的用法
    Python: strip()和split()的用法与区别
  • 原文地址:https://www.cnblogs.com/time93/p/13246413.html
Copyright © 2020-2023  润新知