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 屏蔽了測試確實沒問題了