W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

本次升级添加了两个模块,现在要把他们驱动起来。

一: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;

提供完整代码下载,结合前面的硬件制作,可以完成掌机制作。

下一章开始,我们进行软件开发。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 05:36:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 05:36:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 05:36:02       78 阅读
  4. Python语言-面向对象

    2024-04-24 05:36:02       88 阅读

热门阅读

  1. linux复习提纲

    2024-04-24 05:36:02       34 阅读
  2. 如何在 Ubuntu 上启用 IPv6

    2024-04-24 05:36:02       31 阅读
  3. 十几个好用的学习以及AI网站

    2024-04-24 05:36:02       38 阅读
  4. python使用selenium如何获取一个div下所有的文本

    2024-04-24 05:36:02       38 阅读
  5. AlgorithmDay20

    2024-04-24 05:36:02       37 阅读
  6. 再谈癌症基础与转化研究中的大数据科学

    2024-04-24 05:36:02       35 阅读
  7. 华为OD机试C++ - 最小循环子数组

    2024-04-24 05:36:02       33 阅读
  8. rk3568死机调试

    2024-04-24 05:36:02       37 阅读
  9. X M L

    X M L

    2024-04-24 05:36:02      25 阅读
  10. 关键绩效指标(KPI):明确目标及跟踪进展

    2024-04-24 05:36:02       37 阅读