全志V3S嵌入式驱动开发(sd卡驱动)

news2024/11/7 9:29:13

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        之前开发过程中,整个linux的启动都是基于sd卡进行的。此外,我们有这么几点发现,首先,v3s本身是识别sd卡的,不然无法加载uboot的bin文件;第二,uboot可以驱动sd卡的,不然没有办法加载zImage和dtb文件;第三,linux kernel本身也可以驱动sd卡,不然就不能在根文件目录下面正常添加、删除文件了。

1、了解之前uboot的加载命令

        v3s可以识别sd卡,通过标准的硬件协议来加载uboot bin文件。这一点和spi norflash、spi nandflash很相似。下面,我们可以看看uboot是怎么加载sd卡里面的内容的,

setenv bootm_boot_mode sec
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb

setenv bootargs console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw  vt.global_cursor_default=0
bootz 0x41000000 - 0x41800000

        第一句表示模式设定。

        第二句表示把zImage加载到0x41000000这个地址。

        第三句表示把dtb文件加载到0x41800000这个地址。

        第四句设置参数,比较重要的是console和root,前者表示串口选择,后者表示根文件位置。

        第五句开始启动,两个地址就是zImage和dtb加载的地方。

2、sd卡电路

         sd卡电路表简单,主要就是6个信号,其中D0-D3表示数据,CLK表示时钟,CMD表示命令。

3、设备树配置

        v3s中关于设备树的配置也是比较简单的。首先是sun8i-v3s-licheepi-zero.dts 文件,

&mmc0 {
	pinctrl-0 = <&mmc0_pins_a>;
	pinctrl-names = "default";
	broken-cd;
	bus-width = <4>;
	vmmc-supply = <&reg_vcc3v3>;
	status = "okay";
};

        电路中其实是有两组sd信号的,一组给了sd卡,命名为mmc0;另外一组是给了无线wifi esp 8089。具体的pin脚参考文件sun8i-v3s.dtsi,

			mmc0_pins_a: mmc0@0 {
				pins = "PF0", "PF1", "PF2", "PF3",
				       "PF4", "PF5";
				function = "mmc0";
				drive-strength = <30>;
				bias-pull-up;
			};

        关于寄存器的部分,可以在文件的前半部分找到,

		mmc0: mmc@01c0f000 {
			compatible = "allwinner,sun7i-a20-mmc";
			reg = <0x01c0f000 0x1000>;
			clocks = <&ccu CLK_BUS_MMC0>,
				 <&ccu CLK_MMC0>,
				 <&ccu CLK_MMC0_OUTPUT>,
				 <&ccu CLK_MMC0_SAMPLE>;
			clock-names = "ahb",
				      "mmc",
				      "output",
				      "sample";
			resets = <&ccu RST_BUS_MMC0>;
			reset-names = "ahb";
			interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
			status = "disabled";
			#address-cells = <1>;
			#size-cells = <0>;
		};

        这三处配置都是默认选上的,所以大家不需要自己手动添加,当然也就不需要自己编译和重新烧入了。

4、驱动文件

        驱动文件可以通过关键字sun7i-a20-mmc来查找,可以比较容易的找到具体的驱动文件位置,

即linux-zero-4.14.y/drivers/mmc/host/sunxi-mmc.c,有兴趣的同学可以去看看代码,

static const struct of_device_id sunxi_mmc_of_match[] = {
	{ .compatible = "allwinner,sun4i-a10-mmc", .data = &sun4i_a10_cfg },
	{ .compatible = "allwinner,sun5i-a13-mmc", .data = &sun5i_a13_cfg },
	{ .compatible = "allwinner,sun7i-a20-mmc", .data = &sun7i_a20_cfg },
	{ .compatible = "allwinner,sun8i-a83t-emmc", .data = &sun8i_a83t_emmc_cfg },
	{ .compatible = "allwinner,sun9i-a80-mmc", .data = &sun9i_a80_cfg },
	{ .compatible = "allwinner,sun50i-a64-mmc", .data = &sun50i_a64_cfg },
	{ .compatible = "allwinner,sun50i-a64-emmc", .data = &sun50i_a64_emmc_cfg },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, sunxi_mmc_of_match);

5、确认驱动加载正常

        虽然我们心里知道,驱动加载肯定是没有问题的,这个时候也可以通过查看/dev/mmc*节点的方法,再次确认sd卡已经被正确加载了,

        当然,也许有同学会问,知道了sd卡驱动有什么用。举个例子,大家就明白了。通过看上面的设备节点,其实就清楚了里面包含了zImage和dtb文件,所以如果我们需要升级内核和修改dtb数据的话,完全就可以把/dev/mmcblk0p1加载到/mnt上面,直接替换就可以了,非常方便。 

# mount /dev/mmcblk0p1 /mnt

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

目录 前言 1 自动化测试框架概述 2 自动化测试框架需要的环境 3 自动化测试框架设计思想&#xff1a;Python面向对象 4 自动化测试框架设计思想&#xff1a;POM&#xff08;Page Object Model&#xff09;页面对象模型 【自动化测试工程师学习路线】 结语 前言 之前…

【AI数学】相机成像之外参数

在一个多视点计算机视觉系统里&#xff0c;系统输入除了多个视角的图像外&#xff0c;一般还需要输入对应视角下相机的内外参数。其中&#xff0c;相机内参数决定了图像坐标系和相机三维坐标系的映射关系&#xff0c;而相机外参数则决定了相机三维坐标系和世界坐标系的对应关系…

【TCP/IP】多进程服务器的实现(进阶) - 进程的概念及fork函数

目录 进程的概念及应用 进程的定义 进程的ID fork函数&#xff08;进程创建函数&#xff09; 多进程&#xff08;以及多线程&#xff09;是现代计算机网络的精髓。在之前&#xff0c;我们所做的诸如回声服务器、回声客户端、文件收发等都是偏向基础的单进程应用。而经过前面…

【论文阅读】Twin neural network regression is a semi- supervised regression algorithm

论文下载 GitHub bib: ARTICLE{,title {Twin neural network regression is a semi- supervised regression algorithm},author {Sebastian J Wetzel and Roger G Melko and Isaac Tamblyn},journal {Machine Learning: Science and Technology},year {2022},volum…

“我转行做测试开发的这一年多,月薪5K变成了18K”,中文系萌妹的自白

公司老板是我的测试引路人 本人就读于某普通院校&#xff0c;在大学期间就开始实习找工作&#xff0c;误打误撞进入一家做工业大数据的创业公司。 刚开始我并没有明确的职业发展方向&#xff0c;主要是做一些环境搭建的基础工作。但由于执行效率高&#xff0c;工作责任感强&a…

06-发送短信验证码实现登录功能

1、发送短信验证码实现登录功能的流程 1.1、获取验证码流程 1.2、登录流程 1.3、页面带有图形验证码的流程 2、 注册登录二合一页面的开发 2.1、将src目录下的App.vue页面上通用显示的删掉 2.2、在router目录下的index.js文件中通过懒加载的方式添加login.vue页面 对于rout…

【新版】系统架构设计师 - 软件工程

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 软件工程考点摘要软件工程概述软件能力成熟度模型软件过程模型瀑布模型原型化模型增量模型螺旋模型喷泉模型V模型迭代与增量的概念CBSD基于构件的模型&#xff08;构件组装模型/基于构件的软件开发…

PSP - 更新 MSA 搜索的全部 UniProt 蛋白序列库

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131115471 UniProt 是一个提供蛋白质序列和功能信息的数据库,由欧洲生物信息学研究所(EMBL-EBI)、美国瑞士生物技术信息中心(SIB)和美国蛋白质信息资源(…

一图详解!接口测试之HTTP协议与HTTPS协议的传输过程

目录 前言&#xff1a; 1、HTTP协议 1.1 协议 1.2 原理 1.2.1 客户端 1.2.2 服务器端 1.3 请求报文 1.3.1 报文格式 1.3.2 请求报文方法 1.4 响应报文 1.4.1 报文格式 1.4.2 响应报文状态码 2、HTTPS协议 2.1 加密算法 2.2 数字签名 2.3 传输过程 2.4 流程图 …

Kafka运维监控:Kafka-Eagle安装

kafka自身并没有集成监控管理系统&#xff0c;因此对kafka的监控管理比较不便&#xff0c;好在有大量的第三方监控管理系统来使用&#xff0c;常见的有&#xff1a; Kafka Eagle KafkaOffsetMonitor Kafka Manager&#xff08;雅虎开源的Kafka集群管理器&#xff09; Kafka …

安装和配置Canal

安装和配置Canal 下面我们就开启mysql的主从同步机制&#xff0c;让Canal来模拟salve 1.开启MySQL主从 Canal是基于MySQL的主从同步功能&#xff0c;因此必须先开启MySQL的主从功能才可以。 这里以之前用Docker运行的mysql为例&#xff1a; 1.1.开启binlog 打开mysql容器…

电商打工人的饭碗,AIGC还端不走

文 | 螳螂观察 作者 | 鲸胖胖 以ChatGPT、Midjourney、文心一言等为代表的AIGC产品&#xff0c;已经在全球掀起新一轮的AI技术变革新浪潮&#xff0c;再度刷新了人们对AI的认知&#xff0c;多个行业的商业模式和生态必然在未来会被彻底重构。 前不久&#xff0c;36氪就测使用…

【博客647】MetricsQL(VictoriaMetrics)和PromQL(Prometheus)的不同之处

MetricsQL(VictoriaMetrics)和PromQL(Prometheus)的不同之处 1、如果对PromSQL不熟悉可以先看以下链接 https://valyala.medium.com/promql-tutorial-for-beginners-9ab455142085 2、与PromQL相比&#xff0c;以下功能在MetricsQL中的实现方式不同&#xff0c;这也改善了用户…

AI实战营第二期 第六节 《MMDetection代码课》——笔记7

什么是MMDetection&#xff1f; MMDetection 是被广泛使用的检测工具箱&#xff0c;包括了目标检侧、实例分割、全景分割等多个通用检测方向&#xff0c;并支持了 75 个主流和前沿模型&#xff0c; 为用户提供超过 440 个预训练模型, 在学术研究和工业落地中拥有广泛应用。该恇…

帧布局叠放视图

线性视图只会将视图组织到一行或一列中&#xff0c;每个视图都在屏幕上有自己的位置不会重叠。如果希望布局能够重叠&#xff0c;有个很简单的做法就是使用帧布局。 本文实现一个图像上显示文本的例子。 定义帧布局 <?xml version"1.0" encoding"utf-8&quo…

C++类和对象-5

本篇博客来讲述C类和对象中的最后一些内容&#xff0c;即友元和const的使用方法。 目录 1.友元 1.1引入 1.2内容 1.2.1友元函数 1.2.2友元类 1.3内部类 2.const修饰 2.1内容 2.1.1常数据成员 2.1.2常成员函数 2.1.3常对象 2.2示例 1.友元 1.1引入 在讲述友元之…

使用DR对流量进行管理 subnet子集的定义

这里vs可以控制往svc1和svc2流量走的比例&#xff0c;但是这里只假设往svc3里面走。现在想控制的是往pod1和pod2各走多少流量。 流量到了svc3的时候还是使用的是kube-proxy对流量进行转发。 了解DR DR定义的是经过VS之后已经到达service的流量&#xff0c;主要可以用于&#xf…

【深度学习入门:基于Python的理论与实现】

文章目录 神经网络从感知机到神经网络神经网络的例子复习感知机激活函数登场 激活函数sigmoid函数阶跃函数的实现sigmoid函数的实现 sigmoid函数和阶跃函数的比较ReLU函数 3层神经网络的实现符号确认代码实现 输出层的设计恒等函数和softmax函数输出层的神经元数量 手写数字识别…

【ArcGIS Pro二次开发】(36):度分秒转十进制度

经纬度坐标的表达方式比较常用的一般有2种&#xff0c;【度分秒和十进制度】。 在成果展示中&#xff0c;以【度分秒】居多&#xff0c;但如果要将坐标导入ArcGIS中&#xff0c;则一般需要用到【十进制度】&#xff0c;这个转换可以在Excel中进行&#xff0c;也可以在ArcGIS中的…

火龙果MM32F3273G8P开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

火龙果MM32F3273G8P开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置 1、Systick寄存器 Systick是ARM内核的一个外设&#xff0c;所以在不同芯片的代码上移植比较方便&#xff0c;他总共有4个寄存器&#xff0c; 从Systick定义中可以看到&#xff1a; typedef struct {__I…