硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1308|回复: 4
收起左侧

[客户分享] 华大HC32F460芯片QSPIflash使用方法

[复制链接]

5

主题

51

回帖

66

积分

初级会员

积分
66
QQ
发表于 2022-5-25 14:50:49 | 显示全部楼层 |阅读模式
本帖最后由 dacongzi 于 2022-5-25 15:39 编辑

大家好,最近在使用华大芯片做QSPIFLASH的功能,下面我把一些做的配置代码和说明写下来,希望可以帮到有需要的朋友
       1)引脚配置        下面是我的引脚配置,还有其它引脚可以使用,具体可以参考华大数据手册中引脚功能表中的内容来配置适合自己的配置
         image.png          image.png

         image.png
        2)QSPI外设配置
         具体注释以及功能描述可以参考附件中代码
          image.png
        3)状态获取
         image.png
        4)等待操作完成
         image.png
        5)配置QSPI外设模式的函数(其中QSPI_VirtualPeriodSet接口是我自己写的,官方库里没有此函数,此函数的目的只是更改虚拟周期)
         image.png
         image.png
        6)写使能
          image.png
        7)擦除功能
          image.png
          image.png
          image.png
        8)读取数据(华大芯片只需要配置好外设,读取内存数据时,只需要使用memcpy就可以获取数据,没有指令操作的接口预留,其中1线标准spi读取也可以使用memcpy函数获取,我这里测试过是可以的,但是我没有保留此实现方法)
          image.png
          image.png
          image.png
         9)写入数据(因为>50MHz,使用四线方式写入没有意义,所以我这里只实现了一线写入数据,因为spiflash内容实际写入时间是比较慢的,>50MHz并不能使正真写入速率提高)
          image.png

qspi_drive.rar

5.85 KB, 下载次数: 6

回复

使用道具 举报

5

主题

51

回帖

66

积分

初级会员

积分
66
QQ
 楼主| 发表于 2022-5-25 15:49:22 | 显示全部楼层
这里写的读状态寄存器方法是错误的,可以参考我的上一个帖子,给出了正确的使用方法(https://www.armbbs.cn/forum.php?mod=viewthread&tid=112518
回复

使用道具 举报

5

主题

51

回帖

66

积分

初级会员

积分
66
QQ
 楼主| 发表于 2022-6-7 14:53:19 | 显示全部楼层
这里更改一个之前的错误结论,频率可以设置到100M都没有问题,QSPI读取数据可以达到10MB/s(byte不是bit),这次测试使用的是画的PCB,之前是飞线,是飞线引起的频率不能太高。PCB布线时,需要注意clk,d0~d3最好做等长处理
回复

使用道具 举报

5

主题

51

回帖

66

积分

初级会员

积分
66
QQ
 楼主| 发表于 2022-6-7 15:03:57 | 显示全部楼层
还有一个地方需要注意,我们公司使用的spiflash是普冉的P25Q16H-SUH-IR的料,在使用QSPI命令之前,必须配置spiflash使能qspi功能,具体代码如下:
/******************************************************************************************************
* name    : qspi_qual_enable
* fuction : 使能qspi功能
* author  : cong
* time    : 2022-05-19
* input   :
* output  :
* version : v1.00
* other   :
******************************************************************************************************/
int qspi_qual_enable (void)
{
    spiflash_stat_strc spiflash_stat;

    spiflash_stat.stat_1.reg = qspi_read_stats_reg1 ();
    spiflash_stat.stat_2.reg = qspi_read_stats_reg2 ();
    spiflash_stat.stat_3.reg = qspi_read_stats_reg3 ();

    spiflash_stat.stat_2.s9 = 1;

    // qspi_write_volat_enable ();
    qspi_write_enable ();

    QSPI_EnterDirectCommMode ();
    qspi_change_standard ();

    QSPI_SetWPPinLevel (QspiWpPinOutputHigh);

    QSPI_WriteDirectCommValue (SPI_WRITE_STAT1);
    QSPI_WriteDirectCommValue (spiflash_stat.stat_1.reg);
    QSPI_WriteDirectCommValue (spiflash_stat.stat_2.reg);

    QSPI_SetWPPinLevel (QspiWpPinOutputLow);

    QSPI_ExitDirectCommMode ();

    if (qspi_busy_wait () == QSPI_STAT_TIMOUT)
    {
        LOG_E ("%s:wait stat busy time out", __FUNCTION__);
        return -1;
    }

    return 0;
}
/******************************************************************************************************
* name    : qspi_qual_disable
* fuction : 使能qspi功能
* author  : cong
* time    : 2022-05-19
* input   :
* output  :
* version : v1.00
* other   :
******************************************************************************************************/
int qspi_qual_disable (void)
{
    spiflash_stat_strc spiflash_stat;

    spiflash_stat.stat_1.reg = qspi_read_stats_reg1 ();
    spiflash_stat.stat_2.reg = qspi_read_stats_reg2 ();
    spiflash_stat.stat_3.reg = qspi_read_stats_reg3 ();

    spiflash_stat.stat_2.s9 = 0;

    // qspi_write_volat_enable ();
    qspi_write_enable ();

    QSPI_EnterDirectCommMode ();
    qspi_change_standard ();

    QSPI_SetWPPinLevel (QspiWpPinOutputHigh);

    QSPI_WriteDirectCommValue (SPI_WRITE_STAT1);
    QSPI_WriteDirectCommValue (spiflash_stat.stat_1.reg);
    QSPI_WriteDirectCommValue (spiflash_stat.stat_2.reg);

    QSPI_SetWPPinLevel (QspiWpPinOutputLow);

    QSPI_ExitDirectCommMode ();

    if (qspi_busy_wait () == QSPI_STAT_TIMOUT)
    {
        LOG_E ("%s:wait stat busy time out", __FUNCTION__);
        return -1;
    }

    return 0;
}
回复

使用道具 举报

23

主题

58

回帖

127

积分

初级会员

积分
127
发表于 2022-12-10 10:25:16 | 显示全部楼层
硬件怎么设计?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 08:19 , Processed in 0.179138 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表