打印

[技术问答] QSPI读写的问题

[复制链接]
120|6
跳转到指定楼层
楼主
调用API函数SFLASHHW_4IOReadDrv读Winbond的16MB Flash,SPI接口的方式已经OK,但是4IO的方式读回来都是0xbb,确定QE位已经置1了。

沙发
| 2019-11-1 21:44 | 只看该作者
是不是设置 问题
板凳
 楼主 | 2019-11-4 08:12 | 只看该作者
ddllxxrr 发表于 2019-11-1 21:44
是不是设置 问题

目前读已经可以了,改了官方库,写还有问题。
地板
| 2019-11-4 16:28 | 只看该作者
pq113_6 发表于 2019-11-4 08:12
目前读已经可以了,改了官方库,写还有问题。

有问题的地方可以标出来,我们会确认一下。
5
 楼主 | 2019-11-4 17:54 | 只看该作者
JasonLee27 发表于 2019-11-4 16:28
有问题的地方可以标出来,我们会确认一下。

SFLASH->REG_SF_DUAL = 0x04;
库设置的是0x06,我改成0x04读的数据就对了。
6
 楼主 | 2019-11-6 15:02 | 只看该作者
JasonLee27 发表于 2019-11-4 16:28
有问题的地方可以标出来,我们会确认一下。

请教一下,是不是没有测试过Winbond的SFLASH?库里面明显是只测试过MXIC的
    qspiConfig = SFLASH_GetQSPIReg();
    SFLASH_SetQSPIReg(0x06);
    SFLASH_SetCFG2Reg(0x11);//MXIC
    SFLASH_SetProgramData0Reg(0x38);//MXIC(25L1280)
MXIC的4IO写命令是0x38,而Winbond的是0x32,2个的命令方式也不一样,MXIC的24bit地址也是用的4IO的方式,而winbond的24bit地址是1IO的方式。
7
 楼主 | 2019-11-18 16:58 | 只看该作者
采用非缓存的方式碰到同样的问题,SPI写是对的,QSPI写还是出错。
SPI写的代码:
uint16_t i;
    for(i = 0; i < len; i++)
    {
        SFLASH->REG_SF_RADR2 = (uint8_t)((flashAddr + i) >> 16);
        SFLASH->REG_SF_RADR1 = (uint8_t)((flashAddr + i) >> 8);
        SFLASH->REG_SF_RADR0 = (uint8_t)((flashAddr + i) >> 0);
        SFLASH->REG_SF_WDATA = buf[i];
        SFLASH->REG_SF_CMD = (1 << 4); // bit4 : WR
        ac78xxSFlashWaitDone((uint32_t)(&(SFLASH->REG_SF_CMD)), (1 << 4), 0);
    }
QSPI写的代码:
uint8_t qspiConfig = SFLASH->REG_QSPI_CFG;
    uint16_t i;
    if(sflashManufactor == SFLASH_MXIC)
    {
        SFLASH->REG_QSPI_CFG = 0x06;
        SFLASH->REG_SF_PRGDATA0 = 0x38;  //MXIC is special
    }
    else
    {
        SFLASH->REG_QSPI_CFG = 0x04;
        SFLASH->REG_SF_PRGDATA0 = 0x32; //QSPI page program command
    }
    SFLASH->REG_SF_CFG2 = 0x10;  //use PRGDATA0 as write command
    while((SFLASH->REG_SF_CFG2 & 0x10) != 0x10);
    for(i = 0; i < len; i++)
    {
        SFLASH->REG_SF_RADR2 = (uint8_t)((flashAddr + i) >> 16);
        SFLASH->REG_SF_RADR1 = (uint8_t)((flashAddr + i) >> 8);
        SFLASH->REG_SF_RADR0 = (uint8_t)((flashAddr + i) >> 0);
        SFLASH->REG_SF_WDATA = buf[i];
        SFLASH->REG_SF_CMD = (1 << 4); // bit4 : WR
        ac78xxSFlashWaitDone((uint32_t)(&(SFLASH->REG_SF_CMD)), (1 << 4), 0);
    }
    SFLASH->REG_QSPI_CFG = qspiConfig;
    SFLASH->REG_SF_CFG2 = 0x00;
    while((SFLASH->REG_SF_CFG2 & 0x01) == 0x01);
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
pk10怎么玩 916彩票 乐盈彩票APP 卓易彩票 916彩票 荣鼎彩手机app下载 头奖彩票 新疆喜乐彩走势图 爱投彩票 卓易彩票