日期:2014-05-16  浏览次数:20741 次

Linux spi驱动分析(四)----SPI设备驱动(W25Q32BV)

一、W25Q32BV芯片简介

        W25X是一系列SPI接口Flash芯片的简称,它采用SPI接口和CPU通信,本文使用的W25Q32BV容量为32M,具体特性如下:

1.1、基本特性

        该芯片最大支持104MHz的时钟,供电电压范围在2.7~3.6V,SPI的片选信号CS低有效,在操作芯片的时候,

需要将/WP和/HOLD管脚接电源。

        发送地址或数据到设备时,MOSI管脚数据采样在CLK的上升沿,从芯片读数据或者状态时,MISO管脚数据采样在CLK

的下降沿,所以在设置SPI的工作模式时,必须设置为MODE0或者MODE3,本文设置为MODE3。

1.2、存储空间简介

        W25Q32BV总共有16384页(page),每页有256bytes,每次最大可以编程一页。在擦除上,可以一次擦除

4KB、32KB、64KB,或者擦除整个芯片。整个芯片的存储空间如下图:


        W25Q32BV存储空间分为sector和block。一个sector共有4KB,一个block共有32KB。一个sector存储空间如下图:

    

        本文共支持四种擦除方式,分别如下:

        1) cmd = 0x20,sector擦除,一次可以擦除4KB。芯片共有1024个sector。

        2) cmd = 0x52,半个block擦除,一次可以擦除32KB。芯片共有128个半block。

        3) cmd = 0xd8,block擦除,一次可以擦除64KB。芯片共有64个block。

        4) cmd = 0xC7,芯片擦除,擦除整个芯片。

1.3、状态寄存器

        W25Q32BV共有两个字节的状态寄存器,我们需要关心的就是BIT0和BIT1。

        BIT0:busy flag,1:busy,0:free。

        BIT1:write enable latch,1:write enable,0:write disable。

1.4、操作要求

        在操作W25Q32BV时,如果是写数据到芯片,则每写一个字节,都需要读取一个数据。

        在从芯片接收数据时,首先往芯片写一个字节的0xff,然后就是需要读取的数据。

二、设备驱动

2.1、设备注册

        在系统启动的时候,首先会对设备信息进行注册,见《Linux spi驱动分析(一)----总线驱动》中的3.1,所以编写w25q的设备
驱动程序时,首先需要对设备信息进行注册,具体内容如下:

点击(此处)折叠或打开

  1. #if defined(CONFIG_SPI_FLASH_W25Q)
  2.  static struct gsc3280_spi_info w25q_spi1_dev_platdata = {
  3.      .cs_type            = 1