本次升级添加了两个模块,现在要把他们驱动起来。
一:PSRAM
使用SDK自带的驱动,我们只需要写一个初始化函数,并在其中添加一些自检代码。
void psram_heap_init(){
wm_psram_config(0);//实际使用的psram管脚选择0或者1,W861为2
psram_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 w801
tls_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;
提供完整代码下载,结合前面的硬件制作,可以完成掌机制作。
下一章开始,我们进行软件开发。