乐鑫技术交流
直播中

tr4578

8年用户 928经验值
擅长:模拟技术
私信 关注
[问答]

用spi_flash_read接口去访问SPI外挂的FLASH,无法返回是怎么回事?

我把代码从旧版本的SDK切换到最新的RTOS版本的SDK上。初始化HSPI的overlap后(如下),
SET_PERI_REG_MASK(0x3ff00028, BIT(7));        
//set higher priority for spi than hspi
SET_PERI_REG_MASK(SPI_EXT3(SPI), 0x1);
SET_PERI_REG_MASK(SPI_EXT3(HSPI), 0x3);
SET_PERI_REG_MASK(SPI_USER(HSPI), BIT(5));
做了以上初始化后,用spi_flash_read这个接口去访问SPI外挂的FLASH,无法返回,卡住一段时间后异常复位,异常信息时乱码。

回帖(1)

djelje

2024-7-18 17:58:07
以下是一些可能的原因和解决方案:

1. **SPI初始化问题**:确保你正确初始化了SPI接口。检查你的代码中是否正确设置了SPI的参数,如时钟频率、数据位宽度、CPOL、CPHA等。同时,确保你已经正确配置了SPI的引脚。

2. **FLASH芯片兼容性**:确保你使用的FLASH芯片与ESP32的SPI接口兼容。不同的FLASH芯片可能有不同的操作时序要求,这可能会影响通信。

3. **SPI速度问题**:尝试降低SPI的时钟频率,看看是否能够解决问题。有时,过高的时钟频率可能会导致通信错误。

4. **FLASH地址和命令问题**:确保你在调用`spi_flash_read`时传入的地址和命令是正确的。错误的地址或命令可能会导致FLASH芯片无法正确响应。

5. **中断和优先级问题**:你提到了设置SPI和HSPI的优先级。确保这些设置是正确的,并且不会影响其他中断的处理。同时,检查你的代码中是否有其他地方可能会影响SPI通信的中断处理。

6. **电源问题**:确保FLASH芯片的电源供应稳定。不稳定的电源可能会导致通信错误。

7. **硬件连接问题**:检查你的硬件连接,确保SPI数据线、时钟线和片选线都连接正确,并且没有短路或断路。

8. **软件版本问题**:你提到了从旧版本的SDK切换到最新的RTOS版本的SDK。确保你的代码与新版本的SDK兼容。有时,不同版本的SDK可能会有不同的API或行为。

9. **调试和日志**:尝试在代码中添加调试信息和日志,以便更好地了解问题发生的原因。例如,你可以在调用`spi_flash_read`前后添加日志,以检查是否进入了函数,以及是否成功返回。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分