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;

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/568196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Linux系统命令行安装KingbaseES数据库

人大金仓通用性数据库&#xff08;Kingbase&#xff09;下载网址&#xff1a;人大金仓-成为世界卓越的数据库产品与服务提供商 选择“软件版本-数据库”&#xff0c;筛选条件Linux、完整版。找到需要的版本&#xff0c;点击下载。我下载的是KingbaseES_V008R006C008B0014_Lin6…

CyclicBarrier(循环屏障)源码解读与使用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 什么是CyclicBarrier&#xff1f; 3. CyclicBarrier与CountDownL…

共享单车(一):项目配置

配置文件 对于很多程序中要用的参数如果是可变的&#xff0c;那么最好的处理方式就是通过main函数参数传递&#xff0c;或者从别的地方去获取&#xff0c;这其中之一就是配置文件&#xff0c;但是在一个成熟和架构完善的系统&#xff0c;一般都会做到自动配置&#xff0c;自动…

【刷题】前缀和入门

送给大家一句话&#xff1a; 既然已经做出了选择&#xff0c;最好还是先假定自己是对的。焦虑未来和后悔过去&#xff0c;只经历一个就够了。 – 张寒寺 《不正常人类症候群》 ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ…

算法练习第17天|104.二叉树的最大深度 、559.N叉树的最大深度

104.二叉树的最大深度 104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 什么是二叉树的深度和高度&#xff1f; 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最大深度…

C语言 三目运算符

C语言 逻辑分支语句中 还有一种 三目运算符 我们编写代码如下 #include <stdio.h>int main() {const char* a 1 1 ? "表达式1" : "表达式2";printf("%s", a);return 0; }这里 我们根据逻辑 先定义一个a 然后 它的值 等于一个 三目运算…

AIGC时代之 - 怎样更好的利用AI助手 - 指令工程

爆火的AIGC 2022年11月30日&#xff0c;OpenAI发布ChatGPT 3 2022年12月4 日&#xff0c;ChatGPT 3 已拥有超过一百万用户 2023年各种大语言模型开始火爆全球 GPT们&#xff0c;已经成为了我工作和学习的非常重要的工具。 ChatGPT也没那么神奇&#xff1f; 不知道大家有没有…

web--验证码识别,找回密码

验证码前端回显 当我不知道验证码 查看数据包就可以知道验证吗在数据包之中 burp爆破 &#xff08;前提是没有次数限制&#xff09; 更改返回数据 将成功的回显值更改 验证码更改脚本&#xff08;智能识别&#xff09; 错误的&#xff1a;只要输入一次对了&#xff0c;在bp…

OFDM-OCDM雷达通信一体化信号模糊函数对比研究【附MATLAB代码】

文章来源&#xff1a;微信公众号&#xff1a;EW Frontier 1.引言 为提高频谱利用率并实现系统小型化、集成化,近年来雷达通信一体化系统成为重要研究方向。正交线性调频波分复用(OCDM)信号是利用菲涅尔变换形成的一组正交线性啁啾(chirp)信号,基于OCDM 的雷达通信一体化信号不…

【重要】Heygen订阅指南和用法详解!让照片学说话?一张照片变演讲?Heygen订阅值得吗?

常见问题 Q&#xff1a;Heygen是什么&#xff1f;Heygen是什么玩意&#xff1f; A&#xff1a;Heygen是一款由AI视频工具,创作者只需要上传视频并选择要翻译的语言&#xff0c;该工具可实现自动翻译、调整音色、匹配嘴型。为了方便理解&#xff0c;笔者利用Heygen制作了一个AI视…

C语言中字符串函数以及内存函数的使用和注意事项

目录 0. 前言 1、求字符串长度函数 1.1、strlen 模拟实现 2.长度不受限制的字符串函数 2.1 strcpy 模拟实现 2.2strcat 模拟实现 2.3strcmp 模拟实现 3.长度受限制的字符串函数 3.1strncpy 3.2strncat 3.3strncmp 4、字符串查找函数 4.1strstr 模拟实现 3.2strt…

【C/C++笔试练习】线程作用、磁盘的固定块、多进程、进行调度、cache、内存抖动、非抢占CPU调度、inode描述、文件操作、进制、最难的问题、因子个数

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;线程作用&#xff08;2&#xff09;磁盘的固定块&#xff08;3&#xff09;多进程&#xff08;4&#xff09;进行调度&#xff08;5&#xff09;cache&#xff08;6&#xff09;内存抖动&#xff08;7&#xff09;非抢占…

一台服务器同时启动两个版本jdk

之前Java项目都是1.8的jdk&#xff0c;在服务器部署正常使用&#xff0c;服务器配置环境变量jdk1.8版本。最近一次我用了jdk17版本&#xff0c;部署服务器后&#xff0c;遇见了jdk版本不一致报错 报错内容&#xff1a; 52指向jdk1.8,61指向jdk17&#xff0c;大概就是jdk版本不…

第十六届“华中杯”B 题使用行车轨迹估计交通信号灯周期问题

某电子地图服务商希望获取城市路网中所有交通信号灯的红绿周期,以便为司机提供更好的导航服务。由于许多信号灯未接入网络,无法直接从交通管理部门获取所有信号灯的数据,也不可能在所有路口安排人工读取信号灯周期信息。所以,该公司计划使用大量客户的行车轨迹数据估计交通…

条件编译 #和##运算符

目录 1. #运算符2. ##运算符3. 条件编译4. 题目分享总结 正文开始 前言: 本章为C语言语法完结撒花, 下文将进行C语言中#和##操作符以及条件编译的讲解, 来进一步让我们了解C语言. 作者主页: 酷酷学!!! 1. #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带…

牛客社区所有的表和SQL语句

文章目录 1 帖子表 discuss_post1.1 字段描述1.2 相关功能描述1.2.1 分页查询帖子1.2.2 查询帖子总数量1.2.3 插入一条帖子记录1.2.4 根据帖子ID查询某条帖子1.2.5 更新帖子评论数量1.2.6 更新帖子类型1.2.6 更新帖子状态1.2.7 更新帖子分数 2 用户表 user2.1 字段描述2.2 相关…

cesium primitive 移动 缩放 旋转 矩阵

旋转参考&#xff1a;cesium 指定点旋转rectangle Primitive方式 矩阵篇-CSDN博客 平移参考&#xff1a;cesium 调整3dtiles的位置 世界坐标下 相对坐标下 平移矩阵-CSDN博客 一、primitive方式添加polygon let polygonInstance new Cesium.GeometryInstance({geometry: Ce…

陆金所控股一季报到底是利好还是利空?

3月底&#xff0c;陆金所控股&#xff08;LU.N;06623.HK&#xff09;因其特别分红方案受到市场高度关注。但在4月23日发布的2024年一季度财报中&#xff0c;陆金所控股营收同比下降30.9%&#xff0c;净亏损8.3亿元。 两者对比&#xff0c;外界不由得对公司的经营状况产生疑惑。…

ROS 话题订阅模型之自定义消息类型 C++实现

ROS 话题订阅模型之自定义消息类型 1.自定义消息类型好处 ROS提供了许多标准的消息类型&#xff0c;如 std_msgs/String、sensor_msgs/Image 等&#xff0c;涵盖了很多常见的数据类型和传感器数据。但是&#xff0c;在实际的开发中&#xff0c;我们经常会遇到需要传输的数据类…

【Image captioning】论文阅读九—Self-Distillation for Few-Shot Image Captioning_2022

摘要 大规模图像字幕数据集的开发成本高昂,而大量未配对的图像和文本语料库可能有助于减少手动注释的工作。在本文中,我们研究了只需要少量带注释的图像标题对的少样本图像标题问题。我们提出了一种基于集成的自蒸馏方法,允许使用不成对的图像和字幕来训练图像字幕模型。该…