您尚未登录。

楼主 # 2024-07-08 13:49:09

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

如何解除spi nor flash状态寄存器里的写保护位?

用的芯片是匠芯创的d133,该芯片程序只能存储在片外存储设备上,现用的是w25q128.
正常下载程序使用了一段时间后,发现烧录程序时,下载软件提示下载完成,但是实际没下载成功,程序还是运行的上次成功烧录的那个程序。
更换w25q128后,又可正常烧录。但是,使用一段时间后,仍有概率出现相同问题。

后来知道了spi nor flash有个状态寄存器,就用sfdu命令来查看状态寄存器的值:

sf status
The sf_cmd flash status register current value is 0xFC. 

发现该值为0xFC,而另一块正常的板子,值为0。
查手册,得知为1的各位,其实是写保护位。
通过sf status 0 0,将该寄存器值恢复为0,可以正常烧写了。

过了大概有两三个月吧,问题又出现了,这次读取状态寄存器值,仍为0xFC, 我尝试用sf status 0 0清除该寄存器,结果程序就卡死了...

请教,还有什么办法,可以解除spi nor flash的写保护位吗?

离线

楼主 #1 2024-07-08 17:21:43

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

Re: 如何解除spi nor flash状态寄存器里的写保护位?

看sdk手册里,看到这么一句:
    SPI_CS、SPI_WP、SPI_HOLD必需保留上拉电阻。
    QSPI 信号必需做等长约束,约束不大于20mil,否则跑4线模式容易出现速度跑不高的情况。
实际没有做等长约束,

4根信号线中,最长的710mil,两根650mil左右,一根600mi两座有。
sclk信号线500mil左右。

感觉这里的问题可能性也不大,毕竟目前上店后,片外flash里的程序还能加载到ram里运行,说明读是能成功的。只是不能写。

离线

楼主 #2 2024-07-09 10:40:11

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

Re: 如何解除spi nor flash状态寄存器里的写保护位?

dlk /> sf probe qspi01
qspi0 freq (input): 99000000Hz
qspi0 freq ( bus ): 49500000Hz
01-01 10:14:57 I/NO_TAG: Flash ID: 0xef4018
01-01 10:14:57 I/NO_TAG: Find a Winbond flash chip. Size is 167772.
qspi0 freq (input): 99000000Hz
qspi0 freq ( bus ): 99000000Hz
01-01 10:14:57 I/NO_TAG: sf_cmd flash device is initialize success.
01-01 10:14:57 I/NO_TAG: Probe SPI flash sf_cmd by SPI device qspi.
16 MB sf_cmd is current selected device.
dlk /> sf status
The sf_cmd flash status register current value is 0x00.

早上给群里的朋友试我的固件,修改了配置,打开了芯片的内置1.8V LDO功能。当时现象依旧。
发现gitee上sdk更新了,就拉取了下来,编译并下载,现象依旧。
然后关闭了芯片的1.8V LDO功能,结果,能成功下载了,虽然我认为和LDO打开/关闭关系不大...

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn