全志V3S嵌入式驱动开发(u盘写读)

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

        对于现在的soc来说,基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下,host模式,就是v3s把自己当成了主机,其他设备都是从设备;device模式,相当于别人是主机,v3s是从设备,别人来访问它;otg模式,则可以把usb看成是一种传输媒介,比如可以把usb看成是一条虚拟网线,用usb模拟出网线的效果,实现相应的开发模式。v3s的开发板上面,usb口被做成了micro usb,优点是口变小了,缺点是不太好用,容易被搞坏。此外,对于v3s来说,usb也是spi nandflash镜像烧入最主要的方法。

1、准备一个micro usb转母usb的插口

        micro usb虽然比较小,但是特别容易插坏。所以建议大家在开始今天的实验之前,先准备一个转接器。这样,接口不容易坏,也方便进行后面的实验。

2、原理图

         整个原理图的部分还是很简单,USB_P、USB_N都是直接链接v3 soc的。这里的USB_ID其实是一个gpio口,主要用USB口检测的,后面的设备树会看到这部分。

3、设备树

        在sun8i-v3s-licheepi-zero.dts文件当中,usb的配置部分都已经写好了,比如

&ehci0 {
	status = "okay";
};

&ohci0 {
	status = "okay";
};

&usb_otg {
	dr_mode = "host";
	status = "okay";
};

&usbphy {
	usb0_id_det-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

        需要修改的就是usb_otg中的drv_mode,之前是otg,这里需要修改成host。另外一个地方usb0_id_det-gpios就是之前说的USB_ID,从5和6两个配置看,说明对应的gpio连线是PF6。而原理图上PF6连接的是sd卡上面,这算是蛮有趣的一点。而原理图上面,gpio被连接到42引脚,即PB3。

        实际测试的时候,我们发现USB_ID配置成5和6,一点都不影响最终的测试。驱动代码中,主要也是usbphy用到这个gpio信息。

4、修改驱动配置

        和内核4.2.y配置项比较,升级后5.2.y中,配置的内容多了很多。大部分和usb、u盘相关的配置都已经被设置好,我们唯一需要做的,就能就是打开usb设备插入的打印通知,这样方便我们调试和测试,

5、编译烧入版本和zImage

        因为设备树、内核配置都发生了变化,所以这部分需要重新进行编译,即

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        生成新的dtb文件和zImage文件后,就可以准备相应的烧入工作。

6、开始测试

        因为我们主要是测试usb的host特性,那么使用u盘来测试无疑是最简单的一个方法。测试的标准很简单,首先看u盘插进去的时候有没有打印提示;然后查看u盘的内容有没有办法mount到开发板;最后看有没有办法正常读写。

        当我们插入u盘的时候,可以看到这样的打印,

# [   21.667407] usb 1-1: new high-speed USB device number 2 using ehci-platform
[   21.868861] usb 1-1: New USB device found, idVendor=14cd, idProduct=1212, bcdDevice= 1.00
[   21.877061] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=2
[   21.884244] usb 1-1: Product: Mass Storage Device
[   21.888984] usb 1-1: Manufacturer: Generic
[   21.893084] usb 1-1: SerialNumber: 121220160204
[   21.899255] usb-storage 1-1:1.0: USB Mass Storage device detected
[   21.906033] scsi host0: usb-storage 1-1:1.0
[   22.968591] scsi 0:0:0:0: Direct-Access     Mass     Storage Device   1.00 PQ: 0 ANSI: 0 CCS
[   23.064178] sd 0:0:0:0: [sda] 61454336 512-byte logical blocks: (31.5 GB/29.3 GiB)
[   23.072773] sd 0:0:0:0: [sda] Write Protect is off
[   23.078959] sd 0:0:0:0: [sda] No Caching mode page found
[   23.084289] sd 0:0:0:0: [sda] Assuming drive cache: write through
[   23.095959]  sda: sda1
[   23.102516] sd 0:0:0:0: [sda] Attached SCSI removable disk

        lsusb的时候,也可以查看到当前确实多了一个usb,

# lsusb
Bus 003 Device 001: ID 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002
Bus 001 Device 002: ID 14cd:1212
Bus 002 Device 001: ID 1d6b:0001

        除此之外,我们还看到设备还多了sda、sda1这样的设备节点。有了这些节点,就可以把u盘mount到目录上面了,

# mount /dev/sda1 /mnt

        这个时候ls -l /mnt就可以看到全部的u盘内容,

# ls -l /mnt
total 584048
-rwxr-xr-x    1 root     root      27081744 Jan  9  2023 3-3-01???2022?FPGA???????.pdf
-rwxr-xr-x    1 root     root     145642597 Apr 10  2023 ???.zip
-rwxr-xr-x    1 root     root         13024 Mar 10  2023 ?????????.docx
drwxr-xr-x    2 root     root         16384 Jun  7  2023 ARM????
-rwxr-xr-x    1 root     root      32690417 Dec 31  2022 CH32V307EVT.ZIP
-rwxr-xr-x    1 root     root        391262 Mar  3  2018 KH_Navikit??SDK??????.pdf
-rwxr-xr-x    1 root     root     390483857 Dec  2  2022 MounRiver_Studio_Setup_V183.exe
drwxr-xr-x    2 root     root         16384 Oct 30  2022 System Volume Information
-rwxr-xr-x    1 root     root       1570645 Jul 12  2022 TCP&UDP????.rar
drwxr-xr-x    2 root     root         16384 May 16  2023 boost_arm
drwxr-xr-x    2 root     root         16384 Dec 10  2022 keil5
drwxr-xr-x    2 root     root         16384 Dec 10  2022 quartus
-rwxr-xr-x    1 root     root          1390 May 31  2023 tcp_mess.txt
drwxr-xr-x    2 root     root         16384 Mar 28  2023 zynq

        如果我们有数据拷贝的需要,只需要对/mnt进行操作即可。所有操作完毕之后,umount这个目录,

# umount /mnt

        上面就是v3s进行usb host模式测试的全部过程,大家可以根据自己的需要进行测试,同时加深一下对usb的相关认知。usb非常重要,很多v3s没有的驱动,都可以通过usb驱动来解决的。这或许就是usb最大的优点。

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

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

相关文章

STM32F407移植1588v2(ptpd)

硬件&#xff1a; STM32F407ZGT6开发板 软件&#xff1a; VSCode arm-none-eabi-gcc openOCD st-link 在github搜到一个在NUCLEO-F429ZI开发板上移植ptpd的example&#xff0c;因为和F407差别很小&#xff0c;所以就打算用这个demo移植到手头的开发板上。因为目前只需要…

ASP.NET MVC下的四种验证编程方式

ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表&#xff0c;但是在真正执行目标Action方法之前&#xff0c;还需要对绑定的参数实施验证以确保其有效性&#xff0c;我们将针对参数的验证成为Model绑定。总地来说&#xff0c;我们可以采用4种不同的编程模式来进行针…

DevExpress WPF功能区控件,更轻松创建应用工具栏!(上)

DevExpress WPF的Ribbon、Toolbar和Menus组件以Microsoft Office为灵感&#xff0c;针对WPF开发人员进行了优化&#xff0c;可帮助您在段时间内模拟当今最流行的商业生产力应用程序。 DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业…

百度CDN配置TLS

概述 为了保障您互联网通信的安全性和数据完整性&#xff0c;百度智能云CDN提供TLS版本控制功能。您可以根据不同域名的需求&#xff0c;灵活地配置TLS协议版本。 TLS&#xff08;Transport Layer Security&#xff09;即安全传输层协议&#xff0c;在两个通信应用程序之间提…

LeetCode·每日一题·1177. 构建回文串检测·前缀和

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/can-make-palindrome-from-substring/solutions/2309940/qian-zhui-he-zhu-shi-chao-ji-xiang-xi-by-n3ps/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获…

全景浏览技术在虚拟现实中的应用

随着虚拟现实技术的发展&#xff0c;全景浏览技术越来越受到人们的关注。全景浏览技术是一种可以将场景全方位呈现给用户的虚拟现实技术&#xff0c;可以为用户带来身临其境的视觉和听觉体验。本文将介绍全景浏览技术在虚拟现实中的应用以及如何利用代码实现这些应用。 一、全…

第五节 利用Ogre 2.3实现雨,雪,爆炸,飞机喷气尾焰等粒子效果

本节主要学习如何使用Ogre2.3加载粒子效果。为了学习方便&#xff0c;直接将官方粒子模块Sample_ParticleFX单独拿出来编译&#xff0c;学习如何实现粒子效果。 一. 前提须知 如果参考官方示例建议用最新版的Ogre 2.3.1。否则找不到有粒子效果的示例。不要用官网Ogre2.3 scri…

6.17黄金反弹是否到顶,下周开盘如何布局

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;黄金周五(6月16日)小幅收高&#xff0c;但在触及5月以来最低盘中水准后本周以下跌收官。美市尾盘&#xff0c;现货黄金收报1957.68美元/盎司&#xff0c;下跌0.19美…

vmware设置centos客户机和windows宿主机共享文件夹

一、安装内核 kernel-devel 包 yum install gcc yum install kernel-devel-$(uname -r) 注意&#xff0c;如果自己修改过内核版本&#xff0c;需要确保 uname -r 显示的版本和实际使用的内核版本一致。 二、安装 vmware-tools 在vmware上点击菜单&#xff1a;虚拟机->安…

使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章&#xff1a;使用Nextcl…

LabVIEW开发基于Web数字图像处理

LabVIEW开发基于Web数字图像处理 数字图像处理已在各个领域找到了应用&#xff0c;并已成为一个高度活跃的研究领域。实际实施和实验在教育和研究活动中起着不可或缺的作用。为了方便快捷地实施数字图像处理操作&#xff0c;设计了一个先进的基于Web的数字图像处理虚拟实验室&…

一文搞定C++异常机制(附代码+详细解析)

C异常 1.引文C语言传统的处理错误的方式&#xff1a; 2.C异常概念3.异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出异常捕获中的内存泄漏问题 3.3异常安全3.4异常规范 4.异常优缺点5.总结&#xff1a; 1.引文 C语言传统的处理错误的方式&#xff1a; 终止程序&#xff0c…

python---列表和元组(5)

元组的相关操作 元组的创建 创建元组的时候指定初始值 元组中的元素也可以是任意类型 通过下标访问元组中的元素 下标从0开始到len-1结束 通过切片来获取元组中的一个部分 使用for循环来遍历元组 使用in 判定元素是否存在 使用index查找元素下标 使用来拼接两个元组 元…

2023年互联网Java面试复习大纲:ZK+Redis+MySQL+Java基础+架构

多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知识点考核算法题这个流程下来的。有些公司可能还会问几个实际的场景类的问题&#xff0c;这个环节阿里是必问的&#xff0c;这种问题通常是没有正确答案的&#xff0c;就看个人的理解&#xff0c;个人的积累了…

github action 基于个人项目实践

前言: DevOps 和 Jenkins 作为一名开发&#xff0c;虽然也没有经常听到 Devops &#xff08;研发和运维一体化&#xff09;这个概念&#xff0c;但日常工作中已经无处不在地用着 DevOps 工具。自研也好&#xff0c;基于开源项目改造也好&#xff0c;互联网公司基本都会有自已的…

Django-搭建sysinfo获取系统信息

文章目录 前言一、项目搭建二、主机信息监控三、Celery定时任务和异步任务 前言 使用Django&#xff0c;搭建sysinfo&#xff0c;Linux中,sysinfo是用来获取系统相关信息的结构体 本篇基于&#xff1a;https://github.com/hypersport/sysinfo#readme项目借鉴路径: https://gi…

基于开源大模型Vicuna-13B构建私有制库问答系统

本教程专注在怎么使用已经开源的模型和项目&#xff0c;构建一个可以私有化部署的问答知识库&#xff0c;而且整体效果要有所保障。 主要工作包括&#xff1a; 选择基础模型&#xff0c;openAI&#xff0c;claude 这些商用的&#xff0c;或者其他的开源的&#xff0c;这次我们…

中国金融,如何向科技要答案?

一个科技初创公司&#xff0c;能否凭借科创成果及时获得信贷准入&#xff1f; 一个农民兄弟能否在春播时&#xff0c;获得精准的无抵押贷款&#xff1b;秋收时&#xff0c;通过银行App找到性价比最高的买家&#xff1f; 一家企业&#xff0c;能否通过其生产及交易信息获取线上融…

React diff的原理是什么

一、是什么 跟Vue一致&#xff0c;React通过引入Virtual DOM的概念&#xff0c;极大地避免无效的Dom操作&#xff0c;使我们的页面的构建效率提到了极大的提升 而diff算法就是更高效地通过对比新旧Virtual DOM来找出真正的Dom变化之处 传统diff算法通过循环递归对节点进行依…

WIFI中的频段、信道、信道带宽

一、波长、波速与频率 波长波速/频率 “波速”由“介质”决定。 “频率”由“波源”决定。 “波长”由“介质”(波速V)、“波源”(频率f)共同决定。&#xff08;λV/f&#xff09; 波长&#xff08;wavelength&#xff09;&#xff1a; 指波在一个振动周期内传播的距离。也就…