w801用sdkv1.00.10 移植flashdb后出现spi读取失败的情况
现象:801在上电初始化spi后读取寄存器能正常读出数据01,但在运行一段时间后由接口tls_spi_read_with_cmd响应的数据变为00,查看逻辑分析仪后确认slave响应的数据为正常01:
然后在驱动中增加日志:
实际打印:
发现word32的值由0xffffff01变为0xffffff00,但spi相关寄存器值未发生变化
导致该问题的可能原因是什么?应该如何解决
测试代码:
#define SPI_TT ({\
if(!spi_testttt()){\
printf("spi errrr:%s:%d!",__FUNCTION__,__LINE__);\
while(1);\
}\
});
int master_spi_send_data(int clk, int type)
{
int *p;
int i;
/*MASTER SPI configuratioin*/
wm_spi_ck_config(WM_IO_PB_24);
wm_spi_di_config(WM_IO_PB_25);
wm_spi_do_config(WM_IO_PB_26);
tls_gpio_cfg(WM_IO_PB_18,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLHIGH);
tls_gpio_write(WM_IO_PB_18,1);//cs
tls_gpio_cfg(WM_IO_PB_17,WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLHIGH);
tls_gpio_write(WM_IO_PB_17,1);//nrst
printf("\r\n");
printf("cs--PB04, ck--PB02, di--PB03, do--PB05;\r\n");
if (clk < 0)
{
clk = 1000000; /* default 1M */
}
if (-1 == type)
{
type = 0;
}
if (0 == type)
{
tls_spi_trans_type(0);
}
else
{
tls_spi_trans_type(2);
}
tls_spi_setup(TLS_SPI_MODE_0, TLS_SPI_CS_LOW, clk);
vTaskDelay(1);
tls_gpio_write(WM_IO_PB_18,0);
uint8_t data = 0;
data = 5;
tls_spi_write((u8 *)&data, 1);
data = 1;
tls_spi_write((u8 *)&data, 1);
tls_gpio_write(WM_IO_PB_18,1);
vTaskDelay(1);
data = 4;
tls_gpio_write(WM_IO_PB_18,0);
tls_spi_write((u8 *)&data, 1);
if(tls_spi_read(&data,1) != TLS_SPI_STATUS_OK){
printf("spi err\n");
}
tls_gpio_write(WM_IO_PB_18,1);
printf("spi read:0x%x\n",data);
return WM_SUCCESS;
}
uint8_t spi_testttt(void){
uint8_t data = 0,addr = 0x04;
tls_gpio_write(WM_IO_PB_18,0);
tls_spi_read_with_cmd(&addr,1,&data,1);
tls_gpio_write(WM_IO_PB_18,1);
return !!data;
}
测试在板子上进行,无飞线
重新开个sdk测试了下,发现与flashdb无关,与flash读取有关,以下测试代码能稳定复现:
日志截图:
逻辑分析仪截图:
@ggggjh 这两个并没有关系,我找了一个spi外接flash的板子,按照这个代码简单修改了,测试并没有出错。
@abcd 你修改后di的引脚是哪一个?我找了块没有外设的801开发板测试,将di初始化为不同io并短到3.3,当我初始化di为PB0,PB16,PB25时会出现读值由0xff变为0x00的情况,但是初始化为PB03时确实读出都是0xff正常值没有0的情况.
@ggggjh 用了PB25也没错,试下把wm_main.c里wm_gpio_config里spi pin初始化注掉。
@abcd 屏蔽了测试确实没问题了