本次升级添加了两个模块,现在要把他们驱动起来。
一:PSRAM
使用SDK自带的驱动,我们只需要写一个初始化函数,并在其中添加一些自检代码。
void psram_heap_init(){wm_psram_config(0);//实际使用的psram管脚选择0或者1,W861为2psram_init(PSRAM_QPI);char *psr = (char*) psram_heap_malloc(1024*1024*2);memset(psr,122, 64);for(u8 i=0;i<64;i++){if(psr[i] != 122){printf("init psram false.\n");return;}}printf("init psram success. add = %x\n", psr);psram_heap_free(psr);
}
我们可以看到默认的引脚使用:
case 0://W800 or w801tls_io_cfg_set(WM_IO_PB_00, WM_IO_OPTION4);/*CK*/tls_io_cfg_set(WM_IO_PB_01, WM_IO_OPTION4);/*CS*/tls_io_cfg_set(WM_IO_PB_02, WM_IO_OPTION4);/*D0*/tls_io_cfg_set(WM_IO_PB_03, WM_IO_OPTION4);/*D1*/tls_io_cfg_set(WM_IO_PB_04, WM_IO_OPTION4);/*D2*/tls_io_cfg_set(WM_IO_PB_05, WM_IO_OPTION4);/*D3*/tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_PSRAM); break;
二:SD卡
使用SDK自带的SDIO驱动,我们只需要写一个初始化函数,并在其中添加一些自检代码。
void fatfs_init(void){FRESULT res_sd;//文件操作结果BYTE work[FF_MAX_SS];wm_sdio_host_config(1);//挂载SD卡res_sd = f_mount(&fs, "0:", 1);//***********************格式化测试****************************if(res_sd == FR_NO_FILESYSTEM){while(1){printf("SD卡没有文件系统,即将进行格式化...\r\n");//格式化res_sd = f_mkfs("0:", 0, work, sizeof(work));if(res_sd == FR_OK){printf("SD卡成功格式化!\r\n");//格式化后先取消挂载res_sd = f_mount(NULL, "0:", 1);//再重新挂载res_sd = f_mount(&fs, "0:", 1);break;}else{printf("文件格式化失败!错误代码:%d; will try again...\r\n",res_sd);}}}else if(res_sd != FR_OK){printf("挂载文件系统失败!可能是因为文件初始化失败!错误代码:%d\r\n", res_sd);}else{printf("文件系统挂载成功, 可进行读写测试!\r\n");}
}
我们可以看到默认的引脚使用:
case 1: tls_io_cfg_set(WM_IO_PA_09, WM_IO_OPTION1);/*CK*/tls_io_cfg_set(WM_IO_PA_10, WM_IO_OPTION1);/*CMD*/tls_io_cfg_set(WM_IO_PA_11, WM_IO_OPTION1);/*D0*/tls_io_cfg_set(WM_IO_PA_12, WM_IO_OPTION1);/*D1*/tls_io_cfg_set(WM_IO_PA_13, WM_IO_OPTION1);/*D2*/tls_io_cfg_set(WM_IO_PA_14, WM_IO_OPTION1);/*D3*/tls_open_peripheral_clock(TLS_PERIPHERAL_TYPE_SDIO_MASTER);break;
提供完整代码下载,结合前面的硬件制作,可以完成掌机制作。
下一章开始,我们进行软件开发。