用的芯片是匠芯创的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的写保护位吗?
离线
看sdk手册里,看到这么一句:
SPI_CS、SPI_WP、SPI_HOLD必需保留上拉电阻。
QSPI 信号必需做等长约束,约束不大于20mil,否则跑4线模式容易出现速度跑不高的情况。
实际没有做等长约束,
4根信号线中,最长的710mil,两根650mil左右,一根600mi两座有。
sclk信号线500mil左右。
感觉这里的问题可能性也不大,毕竟目前上店后,片外flash里的程序还能加载到ram里运行,说明读是能成功的。只是不能写。
离线
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打开/关闭关系不大...
离线