硬汉嵌入式论坛

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

[SPI/QSPI] w25q 读取 id 有时会失败 ,但是读写数据是正常的,这个改如何处理呀 ??

[复制链接]

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2022-8-23 11:16:54 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2022-8-23 14:56 编辑

w25q 读取 id 有时会失败 ,但是读写数据是正常的,这个改如何处理呀 ??

读写id 函数如下:

#define READ_ID_CMD2          0x9F         /* 读取ID命令 */  


uint32_t QSPI_ReadID(void)
{
        uint32_t uiID;
        OSPI_RegularCmdTypeDef sCommand = {0};
        uint8_t buf[3];

        /* 基本配置 */
  sCommand.OperationType      = HAL_OSPI_OPTYPE_COMMON_CFG;
  sCommand.FlashId            = HAL_OSPI_FLASH_ID_1;
        sCommand.InstructionMode   = QSPI_INSTRUCTION_1_LINE;    /* 1线方式发送指令 */
        sCommand.InstructionSize    = HAL_OSPI_INSTRUCTION_8_BITS;
        sCommand.AddressSize       = QSPI_ADDRESS_32_BITS;       /* 32位地址 */
        sCommand.AlternateBytesMode = QSPI_ALTERNATE_BYTES_NONE;  /* 无交替字节 */
        sCommand.AddressDtrMode = HAL_OSPI_ADDRESS_DTR_DISABLE;
        sCommand.DQSMode            = HAL_OSPI_DQS_DISABLE;
        sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;          /* 每次传输都发指令 */
        
        /* 读取JEDEC ID */
        sCommand.Instruction = READ_ID_CMD2;         /* 读取ID命令 */
        sCommand.AddressMode = QSPI_ADDRESS_NONE;    /* 1线地址 */
        sCommand.DataMode = QSPI_DATA_1_LINE;        /* 1线地址 */
        sCommand.DummyCycles = 0;                    /* 无空周期 */
        sCommand.NbData = 3;                         /* 读取三个数据 */

        if (HAL_OSPI_Command(&OSPI_Handle, &sCommand, 10000) != HAL_OK)
        {
       Error_Handler(__FILE__, __LINE__);
        }

        if (HAL_OSPI_Receive(&OSPI_Handle, buf, 10000) != HAL_OK)
        {
       Error_Handler(__FILE__, __LINE__);
        }

        uiID = (buf[0] << 16) | (buf[1] << 8 ) | buf[2];
        return uiID;
}

ef4019.png

获取 id 有时正常,有时又不行,







回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2022-8-24 01:00:43 | 显示全部楼层
代码看着没什么问题,降低QSPI时钟试试。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-8-24 08:30:21 | 显示全部楼层
eric2013 发表于 2022-8-24 01:00
代码看着没什么问题,降低QSPI时钟试试。

qspi 的速度我降低到 20MHz  , 貌似也是会这样,有些搞不懂了啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2022-8-25 10:05:43 | 显示全部楼层
hpdell 发表于 2022-8-24 08:30
qspi 的速度我降低到 20MHz  , 貌似也是会这样,有些搞不懂了啊

还有就是降低GPIO速度等级以及ID命令是否对

别的没有什么特别要求了。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-8-25 11:40:02 | 显示全部楼层
eric2013 发表于 2022-8-25 10:05
还有就是降低GPIO速度等级以及ID命令是否对

别的没有什么特别要求了。

id 命令肯定是正确的,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2022-8-25 11:48:45 | 显示全部楼层
hpdell 发表于 2022-8-25 11:40
id 命令肯定是正确的,

换个芯片试试或者换个板子试试,有时候得考虑排查下硬件问题了。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-8-25 14:54:58 | 显示全部楼层
eric2013 发表于 2022-8-25 11:48
换个芯片试试或者换个板子试试,有时候得考虑排查下硬件问题了。

芯片,板子都更换过了,我目前是降低 io 速度,目前使用 GPIO_SPEED_FREQ_MEDIUM,先测试一段时间看看

qspi 布线也做了等长,正常来说不应该,反正速度也没有传说中的 100+ ,因为单片机主频才 120MHz 再加上分屏,最多也就 60MHz 而已的速度
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107046
QQ
发表于 2022-8-26 09:55:56 | 显示全部楼层
hpdell 发表于 2022-8-25 14:54
芯片,板子都更换过了,我目前是降低 io 速度,目前使用 GPIO_SPEED_FREQ_MEDIUM,先测试一段时间看看

...

你这个难道是L4?
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-8-27 11:06:18 | 显示全部楼层

是的, 使用的 单片机是 stm32L4xx 系列的
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-9-30 09:02:50 | 显示全部楼层
本帖最后由 hpdell 于 2022-9-30 11:57 编辑

貌似重新 开关机 ,重新上电读取 id 又是正常的,只是不能够使用 复位 功能读取 id,感觉是不是 w25q 这个芯片本身不够友好哇  ???
难道需要给这个玩意芯片单独搞个 ldo 控制 才行 ?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-9-30 13:42:11 来自手机 | 显示全部楼层
不知道你用的SPI模式是0还是3?如果是0的话换成模式3试试
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-9-30 16:26:22 | 显示全部楼层
skyseek 发表于 2022-9-30 13:42
不知道你用的SPI模式是0还是3?如果是0的话换成模式3试试

刚刚最新发现问题所在了,

是我使用了 掉电模式与唤醒上电模式造成的,

目前根据资料,上电模式后需要延时 3us ,但是我上电后已经延时 了 10 ms 还是不行, ??


007.png




008.png
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-9-30 20:38:48 | 显示全部楼层
终于摆平了,原来是 掉电模式, 上电 模式热的货 ,
回复

使用道具 举报

7

主题

42

回帖

63

积分

初级会员

积分
63
发表于 2022-9-30 22:21:31 | 显示全部楼层
hpdell 发表于 2022-9-30 20:38
终于摆平了,原来是 掉电模式, 上电 模式热的货 ,

具体怎么搞定的?
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
 楼主| 发表于 2022-10-7 20:45:52 | 显示全部楼层
luis_13 发表于 2022-9-30 22:21
具体怎么搞定的?

上电模式后, 我之前使用的是延时 10ms , 现在改成 < 1ms 即可, 根据资料介绍,     1ms  < (delay time) >= 3us 即可
回复

使用道具 举报

7

主题

42

回帖

63

积分

初级会员

积分
63
发表于 2022-10-8 08:22:42 | 显示全部楼层
hpdell 发表于 2022-10-7 20:45
上电模式后, 我之前使用的是延时 10ms , 现在改成 < 1ms 即可, 根据资料介绍,     1ms  < (delay time) > ...

好的,谢谢回复,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 10:47 , Processed in 0.287773 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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