GD25Q32驱动

GD25Q32是一款基于SPI的Flash芯片,容量为32/8=4M bytes。它的引脚如下:

该芯片支持多种SPI操作方式,包括:Standard SPI(标准SPI)Dual SPI(双线 SPI)Quad SPI(四线 SPI) 。有关SPI的介绍可以参考:

SPI通信原理-CSDN博客文章浏览阅读302次,点赞5次,收藏7次。而之所以会有双线SPI和四线SPI的出现,其实主要是因为某些情况下并不需要全双工,但对通信速度有更高的要求,所以对引脚功能做了些调整。但是既然都叫SPI,说明仍然是符合SPI的协议标准的,本次只讲解标准SPI,理解了后感兴趣可以自行研究双线SPI和四线SPI。SPI是一种一主多从的工作模式,不同于IIC,它只有一个主机,读写操作全部由主机发起,从机被动响应。假设CPOL为0,那么在第一个上升沿时,发送方往数据线上发送一位数据,在下降沿时接收方读取一位数据,如此循环8次,一个字节就被发送和接收了。https://blog.csdn.net/u011436603/article/details/136008066其中CS为片选使能脚

SO,WP,SCLK,SI,HOLD为SPI通信引脚,使用标准SPI通信的话,一般只需考虑SCLK,SO和SI就已足够了。

与标准SPI的引脚对应为:

名称标准GD25Q32
片选CSCS#
时钟CLKSCLK
主机发MOSISI(IO0)
主机收MISOSO(IO1)

 GD25Q32属于FLASH,因此和EEPROM不同的是,它无法按字节写入,必须按page去写。擦除的时候可以按扇区或块擦除。每个page有256bytes,注意到每个block可以有32K或64K bytes,这个在后面会影响具体的操作。

接下来直接展示驱动代码,具体解析可以看注释,使用STM32的硬件SPI

//使用spi3读一个字节,用的标准库
unsigned char flash_spi_rchar(void)
{
    while((SPI3->SR&SPI_I2S_FLAG_TXE)==0) ;
    SPI3->DR = 0xff;
    while((SPI3->SR&SPI_I2S_FLAG_RXNE)==0) ;
    return SPI3->DR;
}

//使用spi3写一个字节
void flash_spi_wchar(unsigned char ucChar)
{
    while((SPI3->SR&SPI_I2S_FLAG_TXE)==0) ;
    SPI3->DR = ucChar;
    while((SPI3->SR&SPI_I2S_FLAG_RXNE)==0) ;
    SPI3->DR;
}

 首先列举一下芯片的默认指令,后面代码中出现的指令可以直接对照参考

继续上代码,主要是读写的驱动函数

unsigned char flash_read_status(void)
{
    unsigned char ucChar;

    FLASH_CS_EN;
    flash_spi_wchar(0x05);     //读取状态;
    ucChar = flash_spi_rchar();
    FLASH_CS_DIS;

    return ucChar;
}

void flash_write_trail(unsigned int nAddress,unsigned char* ucData,unsigned int nLength)
{
    unsigned int i,n;

    while(flash_read_status()&0x01);        //忙;

    FLASH_CS_EN;
    flash_spi_wchar(0x06);                  //写使能;
    FLASH_CS_DIS;

    FLASH_CS_EN;
    flash_spi_wchar(0xd8);                  //擦除BLOCK,按64K擦除;
    flash_spi_wchar((nAddress>>16)&0xff);   //存储地址
    flash_spi_wchar((nAddress>>8)&0xff);
    flash_spi_wchar(nAddress&0xff);
    FLASH_CS_DIS;

    while(flash_read_status()&0x01);        //忙

    for(n=1; (n*256)<=nLength; n++)         //256的倍数,表示按页写
    {
        while(flash_read_status()&0x01);    //忙

        FLASH_CS_EN;
        flash_spi_wchar(0x06);                  //写使能;
        FLASH_CS_DIS;

        FLASH_CS_EN;
        flash_spi_wchar(0x02);                  //写入数据;
        flash_spi_wchar(((nAddress+(n-1)*256)>>16)&0xff);
        flash_spi_wchar(((nAddress+(n-1)*256)>>8)&0xff);
        flash_spi_wchar((nAddress+(n-1)*256)&0xff);

        for(i=0; i<256; i++)
            flash_spi_wchar(*ucData++);

        FLASH_CS_DIS;
    }

    while(flash_read_status()&0x01);        //忙

    FLASH_CS_EN;
    flash_spi_wchar(0x06);                  //写使能;
    FLASH_CS_DIS;

    FLASH_CS_EN;
    flash_spi_wchar(0x02);                  //写入数据;
    flash_spi_wchar(((nAddress+(n-1)*256)>>16)&0xff);
    flash_spi_wchar(((nAddress+(n-1)*256)>>8)&0xff);
    flash_spi_wchar((nAddress+(n-1)*256)&0xff);

    for(i=0; i<(nLength%256); i++)
        flash_spi_wchar(*ucData++);

    FLASH_CS_DIS;
}

unsigned char flash_read_char(unsigned int nAddress)
{
    unsigned char ucChar;

    while(flash_read_status()&0x01);        //忙;

    FLASH_CS_EN;

    flash_spi_wchar(0x03);                  //读数据

    flash_spi_wchar((nAddress>>16)&0xff);   //存储地址
    flash_spi_wchar((nAddress>>8)&0xff);
    flash_spi_wchar(nAddress&0xff);

    ucChar = flash_spi_rchar();

    FLASH_CS_DIS;

    return ucChar;
}

以上就是GD25Q32的驱动代码,驱动函数中是按64K擦除的,如果需要按32K擦除,则使用0x52指令即可。

差点忘了,FLASH_CS_EN和FLASH_CS_DIS表示片选使能和失能,即CS引脚的拉高或拉低,由于低电平有效,因此FLASH_CS_EN表示的是引脚拉低。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
gd25q128是一款常见的串行闪存芯片,广泛应用于各种电子设备中。它的主要特点是容量大、读写速度快以及稳定性高。为了能够充分发挥gd25q128的功能,需要安装相应的驱动程序。 gd25q128的驱动程序可以通过厂家官方网站下载获取。在下载驱动程序之前,首先要确定操作系统的版本和架构(32位或64位),以确保下载的驱动程序与操作系统兼容。一旦确定了正确的驱动程序版本,就可以下载并解压驱动文件。 安装gd25q128驱动程序的步骤如下: 1. 连接gd25q128芯片至电脑。使用串行接口(SPI)或者USB适配器连接芯片与电脑。 2. 打开设备管理器。在Windows操作系统中,可以通过控制面板或者右键点击“我的电脑”选择“属性”来打开设备管理器。 3. 找到闪存芯片设备。在设备管理器的列表中,找到与gd25q128相关的闪存芯片设备。 4. 右键点击闪存芯片设备,选择“更新驱动程序”。 5. 选择“浏览计算机以查找驱动程序软件”选项。 6. 在新的窗口中选择驱动程序所在文件夹。 7. 点击“下一步”进行驱动程序安装。 8. 等待驱动程序安装完成,系统将会自动识别并加载gd25q128闪存芯片。 安装完成之后,电脑即可正常使用gd25q128芯片进行读取和写入操作。确保驱动程序的安装和更新可以提高gd25q128的性能和稳定性,并确保电脑与gd25q128芯片之间的通信无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕诗客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值