USB单片机CH559实现模拟U盘应用源码
CH559单片机的几种加密方式
芯片加密建议1、概述在该说明文档中会讲述目前(2015.12.30)正在使用或者已知的一些加解密技术作为开发者加密建议,其实我们只是想表述一种思想、方法和简单的建议,更多的还是开发者自己去完成,不然加密方式千篇一律,其意义也不是很大;另外由于加解密技术会随着时间的推移而更加的多样化,所以列举的加解密方法会受实时影响,希望开发者能够理解。
首先要明确一个概念,采用更多的或更先进的加密手段,只能提高解密难度,但是不能绝对杜绝芯片被解密。
随着芯片逆向技术的提高,做芯片解密研究的投入也在增加,总能找到办法解密芯片,没有绝对安全的加密手段。
所以在做一个产品的时候,保密安全性是一个因素,但最为重要的还是产品的功能,所以不能因为加密而使设计提高了较大难度,从而影响了设备本身的功能。
芯片加解密的最重要原则就是,尽量做到解密成本大于开发成本,这样解密也就没有价值和意义。
2、解密技术这里讲解密技术不是为了普及解密方法,我们是要做到知己知彼,才能百战不殆,保住自己的劳动成果。
以下会列举一些已知的解密方法,其实这些东西在网上或者专门做解密芯片的门户网站上也能有简单的说明,我们只要了解其使用方法,然后有针对性的做好加密工作。
单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。
为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。
如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。
目前,攻击单片机主要有四种技术,分别是:(1)、软件攻击该技术通常使用处理器通信接口并利用协议、加密算法的安全漏洞来进行攻击。
软件攻击者利用单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。
u盘启动实验报告
u盘启动实验报告U盘启动实验报告引言:U盘启动是一种常见的计算机启动方式,它不仅方便快捷,还可以帮助我们解决一些计算机故障。
本报告将介绍U盘启动的原理、实验过程和实验结果,并探讨其在实际应用中的意义。
一、U盘启动的原理U盘启动是指通过将操作系统安装在U盘上,并将计算机的启动顺序设置为从U盘启动,从而实现使用U盘来启动计算机。
U盘启动的原理主要涉及两个方面:操作系统的安装和启动顺序的设置。
1. 操作系统的安装在进行U盘启动前,我们需要先将操作系统安装到U盘上。
具体步骤如下:(1)准备一个可用的U盘,并将其格式化;(2)下载操作系统的安装镜像文件,并使用专业的软件将其写入U盘;(3)将U盘插入计算机,并重新启动计算机。
2. 启动顺序的设置在计算机重新启动后,我们需要设置计算机的启动顺序为U盘启动。
具体步骤如下:(1)进入计算机的BIOS设置界面,通常可以通过按下特定的按键(如Del、F2等)进入;(2)在BIOS设置界面中,找到启动选项,并将U盘启动设为第一启动项;(3)保存设置并退出BIOS,计算机将会重新启动。
二、实验过程为了验证U盘启动的可行性,我们进行了一次实验。
实验所需材料包括一台计算机、一根U盘和一个操作系统的安装镜像文件。
1. 准备工作(1)选择一款适合自己的操作系统,并下载其安装镜像文件;(2)将U盘插入计算机,并备份其中的重要数据;(3)使用专业的软件将操作系统的安装镜像文件写入U盘。
2. 设置启动顺序(1)将U盘插入计算机,并重新启动计算机;(2)在计算机重新启动后,按下特定的按键(如Del、F2等)进入BIOS设置界面;(3)在BIOS设置界面中,找到启动选项,并将U盘启动设为第一启动项;(4)保存设置并退出BIOS,计算机将会重新启动。
3. 进行U盘启动(1)计算机重新启动后,会自动从U盘启动;(2)按照操作系统的安装向导进行安装,并选择U盘作为安装目标;(3)等待操作系统的安装完成,然后重新启动计算机。
CH559开发板资料
USB单片机CH559的评估板说明版本:1C1、硬件部分1.1 开发板1.2 开发板主芯片及功能说明CH559 芯片是一款兼容 MCS51 指令集的增强型 E8051 内核单片机,其 79%的指令是单字节单周期指令,平均指令速度比标准 MCS51 快 8~15 倍。
CH559 内部/外部晶振可选,内置 64K 程序存储器 Flash-ROM 和 256 字节内部 iRAM 以及 6K字节片内 xRAM,部分 xRAM 支持 DMA 直接内存存取。
CH559 内置了 ADC 模数转换、4 组定时器和 PWM、双异步串口、双 SPI 等功能模块,以及内置双端口 Root-HUB,支持 USB-Host 主机模式和 USB-Device 设备模式。
开发板配有 32KB 外扩 RAM、 2MB 串行 FLASH、自弾式TF卡座、RTC时钟电路、 2*USB 接口、串口(MAX3243)、8 路 10/11 位 AD、8 位主动并口、5 个 LED 灯、4 个按键、电源支持 9V/5V/3.3V 供电,可通过 USB Host/Device口和串口 0 下载代码。
2、创建工程-编译工具KEIL42.1 运行编译器点击“project”,如下图选择“New μVision Project…”,弹出一对话框,如下图2.1.1所示,选择创建工程的目录,输入文件名,点击“保存”。
图2.1.12.2 CPU选择点击“保存”之后弹出对话框,选择SST系列89x58RD(其他MCU型号也可)如图2.2.1,点击“OK”弹出2.2.2对话框,选择“否”,创建完成。
图2.2.1图2.2.22.3 编译按F7编译,生成“.HEX”的文件。
3、程序下载3.1运行软件双击运行,安装下载工具,如果没有安装驱动,需要安装驱动程序。
安装完成后,运行WCHISPTool.exe,如图3.1.1,选择“8位C51 CH5XX系列”,在“芯片型号”中选择芯片型号“CH559”。
单片机USB模拟U盘源码
单片机USB模拟U盘源码虽然现在成品U盘的成本已经非常低,但是单片机系统中模拟U盘还是有些场景会应用到,比如:①代替传统光盘,为用户提供说明书、驱动软件等(直接存储在产品中)②U盘数据监控、截取和加密等(定制U盘)③采集数据暂存,方便传输给主机下文是根据masstorage和Bulk-Only传输协议,使用CH559实现模拟U盘的功能(容量大小由选择的外部存储芯片决定),用以实现数据转存或定制U盘功能。
关键点在于USB 设备模式初始化、扇区读写和外部存储芯片的操作。
一、总体概述模拟U盘关键功能部件包括以下几点:(1)、具有USB设备功能的MCU或接口芯片,此例中CH559有2个USB主机接口和1个USB设备接口。
(2)、根据实际需要或者接口选择合适的外部存储来作为U盘的存储空间,比如SPI的串行Flash、E2PROM,甚至是Nand Flash等。
以上准备完毕整体的操作流程如下所示:二、硬件电路CH559模拟U盘使用的SPI接口的串行Flash,硬件如下图:CH559是增强型51内核的单片机,内置晶振,所以芯片外围也足够简洁。
芯片资源如下图:三、软件编写软件主要包括以下方面:(1)、USB设备模式初始化(2)、存储芯片接口初始化(3)Bulk_Only传输CBW包:CSW包:四、可拓展功能(1)、其他存储介质:除了以上提到的SPI接口的串行Flash,也可以替换成E2PROM或者Nand falsh等。
(2)、数据来源可以随意指定,比如串口数据流,并口数据流,甚至其他温湿度传感器设备等。
(3)、CH559+SPI串行Flash模拟U盘测试参数CH563模拟U盘源码.rar559模拟U盘源码.rar五、源码分享CH559模拟U 盘的源代码(C 语言):CH563模拟U 盘的源代码(C 语言):。
沁恒CH559芯片入门指南
沁恒CH559芯⽚⼊门指南CH559 ⼊门指南CH559 是沁恒公司⽣产的 8 位增强型新⼀代 51 内核单⽚机,相⽐传统的 8051 使⽤了较多新的技术。
以下新技术为传统 8051 没有的:1. 锁相环(PLL) —— 可以实现⾮整数倍的频率调整,可以对外输出需要时钟信号2. 内置晶振 —— 内置 12MHz 晶振,可以简化电路设计,也可以使⽤外接晶振3. USB 控制器和收发器 —— 可以实现 USB 通讯,产品可以使⽤ U 盘更新固件4. SPI 控制器 —— 可以实现 SPI 通信,⽀持 SD-CARD 等 SPI 设备5. ADC 模数转换 —— ⽀持 10 位或者 11 位模数转化,最⾼ 1Msps 采样率6. LED-CTRL —— ⽀持 LED 屏控制卡接⼝7. GPIO —— 可选多种模式,开漏或强推挽,上拉或者不上拉电阻8. ID —— 内置 ID,可⽤于程序保密可以看到 CH559 的功能还是⼗分强⼤的,基本上可以满⾜常⽤的功能⽽不需要外挂芯⽚。
这⾥以 CH558&9L MINIEVT 这块板⼦为例,介绍 CH559 的使⽤⽅法。
(CH558 与 CH559细节上⾮常类似,多数代码可以通⽤)沁恒的芯⽚下载程序为 WCHISPTOOL,使⽤起来⽐较简单,⽀持 USB 和串⼝下载两种⽅式,当然⾸先要将 WCH 芯⽚⽀持库添加到 Keil 软件中去,之后在 Keil 就可以使⽤WCH 系列的芯⽚了。
在这⾥,作为开始,新建⼯程并编写⼀个简单的程序来测试⼀下单⽚机输出:在 Keil ⾥有这么⼀个函数 _nop_(),它可以让 CPU 空转⼀个周期。
编写测试代码,并编译,打开配置设置⾥的 hex ⽂件输出选项,下载需使⽤ hex ⽂件。
然后下载 hex ⽂件到实验板注意:⾸先选择正确的芯⽚系列,选择正确的芯⽚型号,勾选“下载完成后运⾏⽬标程序”(如果不勾选就要在下载程序后按复位按键,⼿动运⾏程序),选择需要下载的 hex ⽂件。
用usb给单片机供电的原理
用usb给单片机供电的原理下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!用usb给单片机供电的原理USB给单片机供电的原理主要基于USB接口的标准特性。
51单片机读写U盘源代码 430单片机读写U盘源代码
* 西安达泰电子有限责任公司(Xi'an DATAI Electronic Co,Ltd)
*
* 网址:
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
//读文件命令
uchar code Read[66] ={0xaa,0xbb,
0x08,0x08,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
//删除文件命令
uchar code Remove[66]={0xaa,0xbb,
0x11,0x00,0x54,0x45,0x53,0x54,0x20,0x20,0x20,0x20,0x54,0x58,0x54,0x00,0x00,0x00,
****************************************************************************************************/
CH559 评估板使用说明书
USB单片机CH559的评估板说明版本:V1.51、硬件部分1.1开发板图1.1.3CH558&9MINIEVT图1.1.1CH559EVT图1.1.2CH559MINIEVT1.2开发板主芯片及功能说明(1)、芯片工作电源选择:芯片电压选择,VCC和+5V短接,VDD33悬空,CH559的工作电压选为5V;VCC 和3V3短接,VDD33和3V3短接,CH559工作电压选为3.3V;(2)、评估板电源输入:通过P1电源适配器插口输入8-15V的电压,如图1.1.1的P1口;通过USB直接输入5V电压,如图1.1.1和图1.1.2的USB口;通过VCC和GND插针直接输入5V或者3.3V电压,图1.1.1和图1.1.2都可以通过VCC和GND供电;(3)、复位:C15默认不焊,若焊接则延长复位时间;(4)、TF卡使用SPI方式进行操作,使用时R1需焊接0Ω电阻;(5)、串行Flash使用SPI0操作,使用时R6需焊接0Ω电阻;(6)、LED指示灯连接P4.0~P4.3,引脚输出低电平点亮相应的LED;(7)、P5.4/P5.5支持iRS485数据收发,使用时R16/R18焊20K电阻,R17接120Ω电阻;(8)、外扩RAM物理连接采用直接地址方式,用法参考例程XBUS.C,使用时需短接J4;2、评估板资料包说明来源:搜索CH559文件名:CH559EVT.ZIP资料包:头文件(C、汇编)评估板原理图PCB图例程2.1CH559.uvproj功能:CH559keil4工程文件,头文件、延时函数、串口0初始化等常用函数定义;2.2ADC文件夹功能:ADC中断(查询)方式手动和自动采集,ADC采样时钟设置,电压比较功能函数定义;2.3CHIP_ID文件夹功能:芯片唯一ID号获取函数定义;2.4DataFlash文件夹功能:DataFlash擦除读写函数定义;2.5Encryption文件夹功能:芯片常用加密方法介绍和说明;2.6GPIO文件夹功能:GPIO设置和GPIO中断使用说明;2.7IAP文件夹功能:CH559用户程序跳转至IAP升级演示和说明文档,提供上位机软件和源码;2.8LED_CTRL文件夹功能:CH559LED控制卡演示,支持U盘更新显示内容和掉电数据不丢失;2.9PWM文件夹功能:PWM1&2初始化,PWM占空比设置函数;2.10SPI0文件夹功能:SPI0主机从机模式初始化和数据收发演示,主机操作CH376,从机连接其他C51MCU;2.11SPI1文件夹功能:SPI0主机模式初始化和数据收发演示,主机操作CH376;2.12Timer0文件夹功能:定时器0初始化和定时器、计数器使用函数定义;2.13Timer1文件夹功能:定时器1初始化和定时器、计数器使用函数定义;2.14Timer2文件夹功能:定时器2初始化和定时器、计数器使用函数定义,定时器2捕捉功能函数定义;2.15Timer3文件夹功能:定时器3初始化和定时器、计数器使用函数定义,定时器3捕捉功能函数定义和PWM3设置及使用;2.16UART0文件夹功能:串口0初始化和中断收发示例;2.17WDOG文件夹功能:看门狗初始化和喂狗;2.18XBUS文件夹功能:并行总线初始化和数据收发函数定义;2.19USB_LIB文件夹功能:USB文件系统库;2.20USB文件夹A.DEVICE文件夹模拟USB键鼠例程,支持部分类命令;模拟厂商自定义设备,需要安装CH372驱动,可以通过372test.exe调试(批量数据收发,中断传输);B.HOST文件夹USB主机应用例子,初始化和枚举USB端口连接的设备,支持一级外部HUB,可以操作USB键鼠和HUB,打印机,包含HID类命令处理;C.U_DISK字节方式读写文件,包括文件创建、删除、修改文件属性,修改文件名;扇区方式读写文件,包括文件创建、删除、修改文件属性,修改文件名;创建文件夹和文件创建;枚举根目录或者指定目下的文件;2.21PUB评估板说明功能:评估板说明、评估板原理图3、MCU ISP下载软件说明3.1下载前准备3.1.1ISP变更重要:因为ISP工具升级更新,芯片BOOT版本V2.30以前的版本需要在V2.40及以上版本ISP工具上选择支持的BOOT版本,以下以ISPTool(V2.40)为例,默认支持最新BOOT。
U盘代码
最好是JPG或BMP格式的)
三、标示特殊文件夹
系统中有一些特殊的文件夹,如回收站、我的电脑、我的文档、网上邻居等。这些文件夹的标示有两种方法:
1.直接在文件夹名后续上一个"."在加对应的CLSID
如:把一个文件夹取名为:新建文件夹.
那么这个文件夹的图标将变为我的电脑的图标,并且在双击该文件夹时将打开我的电脑。
其中aaa.jpg就是选择的图片文件(含扩展名)。
3.把文本文件另存为Desktop.ini ,修改完成。
3保存为Desktop.ini ,刷新下就可以看到效果了 (图片和Desktop.ini放一个文件夹里)
为了美观,可以把图片,和Desktop.ini文件隐藏
改字体颜色: Attributes=1
2 背景自定义:
1.首先选择一个你喜欢的背景图片,把它复制到U盘中。
2.新建文本文件,将下面的内容复制到其中:
[ExtShellFolderViews]
[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
IconArea_Image=aaa.jpg
IconFile=ColorFolder.dll
IconIndex=0
保存为deskto.ini文件,连同ColorFolder.dll文件
如果想同时添加背景图片及改变文件夹内文件名颜色!
[ExtShellFolderViews]
=
[]
IconArea_Text=0x000000FF
Attributes=1
IconArea_Image=bg04.jpg
[.ShellClassInfo]
U盘启动的原理和程序制作方法
U盘启动的原理和程序制作方法U盘启动是指通过将操作系统或其他可执行程序安装在U盘上,从U盘启动电脑,并且运行安装在U盘上的系统或程序。
一、U盘启动的原理:1.BIOS/UEFI支持:大多数现代主板的BIOS/UEFI都支持从U盘启动选项。
当打开电脑时,系统会首先检测BIOS/UEFI中的启动顺序,如果U盘在启动顺序中排在硬盘之前,则系统将尝试从U盘启动。
2.U盘格式化和分区:为了能够从U盘启动,U盘需要被格式化,并且分区成一个活动分区。
活动分区包含引导扇区,其中存储了启动相关的信息。
3. 引导加载程序:引导加载程序(Bootloader)是一个小型程序,存储在U盘的引导扇区中。
它的作用是引导操作系统或其他可执行程序的加载和运行。
4.操作系统或可执行程序:将操作系统或可执行程序安装在U盘上。
可以通过制作可引导的U盘或者在U盘上安装一个完整的操作系统来实现。
二、制作可引导的U盘:制作可引导的U盘的方法有很多种,以下是其中两种常见的方法:1.使用制作启动盘工具:第一步:准备一个能够写入U盘的电脑,并插入一个空白的U盘;第三步:打开工具,并按照工具的提示选择要安装的操作系统或其他程序的ISO文件;第四步:选择U盘为目标设备,并保证U盘中的数据已经备份,因为这个过程会格式化U盘;第五步:点击开始制作启动盘按钮,等待制作完成;第六步:将制作好的U盘插入要启动的电脑,并重启电脑。
在开机过程中按照提示进入BIOS/UEFI设置界面,并设置U盘为启动选项。
2.使用命令行制作:第一步:准备一个能够写入U盘的电脑,并插入一个空白的U盘;第二步:按下Win+R组合键,打开运行窗口,输入"cmd"并回车,打开命令提示符窗口;第三步:运行磁盘分区命令"diskpart",并在diskpart命令窗口中运行以下命令:- list disk:显示所有的磁盘列表,找到对应的U盘;- select disk n:选择U盘,将n替换为U盘的磁盘号;- clean:清除U盘上的所有数据;- create partition primary:创建一个主分区;- format fs=ntfs quick:快速格式化分区为NTFS格式;- active:激活分区;- assign:给分区分配一个盘符;- exit:退出diskpart命令;第四步:将操作系统或其他可执行程序的文件复制到U盘中;第五步:将制作好的U盘插入要启动的电脑,并重启电脑。
android通过usb读取U盘的方法
android通过usb读取U盘的⽅法本⽂实例为⼤家分享了android通过usb读取U盘的具体代码,供⼤家参考,具体内容如下1.关联 compile ‘com.github.mjdev:libaums:+'2.权限设置<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="b.host" android:required="false" /><uses-feature android:name="b.host" android:required="true" />3.监听u盘插⼊拔出的⼴播//监听otg插⼊拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听⾃定义⼴播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);4.代码package btest;/*** @项⽬名: UsbTest* @包名: btest* @⽂件名: ReadUDisk* @创建者: 25934* @创建时间: 2018-07-24 13:50* @描述: TODO*/import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import bManager;import android.util.Log;import bMassStorageDevice;import com.github.mjdev.libaums.fs.FileSystem;import bFile;import com.github.mjdev.libaums.partition.Partition;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import parator;import java.util.List;import static btest.Constant.ACTION_USB_PERMISSION;public class ReadUDisk {private UDiskCallBack.OnUDiskCallBack mOnUDiskCallBack = null;private Context mContext;private UsbMassStorageDevice[] storageDevices;private List<UsbFile> usbFiles = new ArrayList<>();private final UsbManager mUsbManager;public ReadUDisk(Context context) {mContext = context;mUsbManager = (UsbManager) mContext.getSystemService(B_SERVICE);}/*** 接受U盘插⼊和拔出事件* @param onUDiskCallBack*/public void setOnUDiskCallBack(UDiskCallBack.OnUDiskCallBack onUDiskCallBack) {if (mOnUDiskCallBack == null) {registerReceiver();mOnUDiskCallBack = onUDiskCallBack;}}/*** 注册⼴播接收者*/public void registerReceiver() {//监听otg插⼊拔出IntentFilter usbDeviceStateFilter = new IntentFilter();usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);mContext.registerReceiver(UDiskMountedReceiver, usbDeviceStateFilter);//注册监听⾃定义⼴播IntentFilter filter = new IntentFilter(Constant.ACTION_USB_PERMISSION);mContext.registerReceiver(UDiskMountedReceiver, filter);Log.e("ReadUDisk", "registerReceiver: ");}/*** 注销⼴播接收者*/public void unReisterReceiver() {if (UDiskMountedReceiver != null) {mContext.unregisterReceiver(UDiskMountedReceiver);}}/*** 检查usb设备的权限* @param device* @return*/public boolean checkPerssion(UsbMassStorageDevice device) {if (mUsbManager==null){return false;}if (mUsbManager.hasPermission(device.getUsbDevice())) {//有就直接读取设备是否有权限return true;} else {return false;}}/*** 读取当前usb设备的数量* @return*/public int getDeviceCount() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext); return storageDevices.length;}/*** 根据position获取usb设备* @param position* @return*/public UsbMassStorageDevice getUsbMassDevice(int position) {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext); if (position > storageDevices.length) {return null;} else {return storageDevices[position];}}/*** 获取usb上所有的存储设备* @return*/public UsbMassStorageDevice[] getUsbMassAllDevice() {//获取存储设备UsbMassStorageDevice[] storageDevices =UsbMassStorageDevice.getMassStorageDevices(mContext);return storageDevices;}/*** 根据设备获取路径* @param device* @return*/public FileSystem readDevice(UsbMassStorageDevice device) {try {if (!checkPerssion(device)){ //检查是否有权限return null;}device.init();//使⽤设备之前需要进⾏初始化Partition partition = device.getPartitions().get(0); //仅使⽤设备的第⼀个分区FileSystem currentFs = partition.getFileSystem();// currentFs.getCapacity(); //容量⼤⼩// currentFs.getOccupiedSpace(); //已使⽤⼤⼩// currentFs.getFreeSpace(); //未使⽤的⼤⼩UsbFile root = currentFs.getRootDirectory();//获取根⽬录String deviceName = currentFs.getVolumeLabel();//获取设备标签return currentFs;} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取U盘的⽂件和⽂件夹路径* @param fileSystem* @return*/public List<UsbFile> getUsbFiles(FileSystem fileSystem) {usbFiles.clear();try {for (UsbFile file : fileSystem.getRootDirectory().listFiles()) { //将所以⽂件和⽂件夹路径添加到usbFiles数组中usbFiles.add(file);}Collections.sort(usbFiles, new Comparator<UsbFile>() {//简单排序⽂件夹在前⽂件在后 @Overridepublic int compare(UsbFile oFile1, UsbFile oFile2) {return oFile1.isDirectory()-1: 1;}});} catch (IOException e) {e.printStackTrace();}return usbFiles;}private BroadcastReceiver UDiskMountedReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();switch (action) {case ACTION_USB_PERMISSION: //⾃定义权限⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onPermissionCallBack();}break;case UsbManager.ACTION_USB_DEVICE_ATTACHED: //usb设备插⼊⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onAttachDeviceCallBack();}break;case UsbManager.ACTION_USB_DEVICE_DETACHED: //usb设备拔出⼴播if (mOnUDiskCallBack != null) {mOnUDiskCallBack.onDetachDeviceCallBack();}break;}}};}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
常用USB芯片介绍(转串口、SPI、单片机读写U盘)
常用USB芯片介绍(转串口、SPI、单片机读写U盘)USB1.1:CH375 有HOST和SLAVE两种方式,即可以当主机去控制别的USB设备,如U盘等,又可以被PC控制。
CH372 只有设备模式,不能控制别的USB设备USB2.0:内部不含单片机核的USB芯片:CY7C68001 CYPRESSFT245BM FTDI内部含有单片机核的USB芯片:CY7C68013 CYPRESS 有3种(56针,100针,128针)USB OTG:CY7C67200、CY7C67300, 内含16位的RISC MCU,输出16位的数据。
为全速的USB接口TD1120 集成全速主机高速从机,TransDimension公司生产GL824 没有下到DATASHEET,不过网上都有资料,应该是高速的USB HUB:AT43301 一个上行4个下行,为USB1.1接口GL850A 一个上行4个下行,为USB2.0接口以下这些HUB是网上弄来的,还没有查过,有要用到的去查查看吧:Alcor Micro AU2916,AU9412AtmEl AT43301,AT43311FDTI FT8U2100AXIntel 8x930Hx,8x931HxKC TecHnology KC82C160,KC82C169Motorola MC141555,MC141556PHilips PDIUSBH11,PDIUSBH12Sola Electronics MSE9701,MSE9712TI TUSB204613USAR Systems UR3HCGNHWinbond W81C180,W82C620PS:1、USB协议规USB通信遵守严格的主从模式,即必须是主-从,不能主-主或从-从。
(很多人都知道,但考虑设计的时候没有注意到)2、USB HUB是USB设备,只能接USB主机,比如以上的OTG 的芯片,不能接非USB主机的芯片,比如CY7C68013.但是HUB接主机芯片以后,该芯片直接确定为主机模式,不能再设为从机。
u盘电路原理
u盘电路原理U盘电路原理。
U盘,又称闪存盘,是一种便携式存储设备,广泛应用于个人电脑、笔记本电脑和其他数字设备上。
它的小巧便携,高速传输和大容量存储使其成为人们日常生活和工作中不可或缺的一部分。
而U盘的核心就是其电路原理,下面我们就来详细了解一下U盘电路原理。
首先,U盘的电路原理主要包括控制芯片、闪存芯片、USB接口和其他辅助电路。
控制芯片是U盘的大脑,负责管理数据的读写、存储和传输。
闪存芯片则是U盘的存储介质,它采用了闪存技术,具有高速读写、稳定性好、抗震抗摔等优点。
USB接口则是U盘与电脑或其他设备连接的接口,通过USB接口,U盘可以与电脑进行数据传输和通讯。
除此之外,U盘的电路中还包括了供电电路、时序控制电路、数据传输电路等辅助电路,这些电路共同构成了U盘的完整电路原理。
在U盘的工作过程中,当U盘插入电脑的USB接口时,电脑会向U盘发送供电信号和识别信号。
U盘的控制芯片接收到识别信号后,会启动U盘的工作状态,同时控制芯片会对U盘进行供电,使U盘正常工作。
此时,U盘的闪存芯片会根据控制芯片的指令,进行数据的读取或写入操作。
而在数据传输过程中,U盘的USB接口会与电脑的USB接口进行通讯,通过数据传输电路进行数据的传输和接收。
整个过程中,控制芯片会对数据进行管理和校验,保证数据的完整性和安全性。
除了基本的数据传输功能,U盘的电路原理还决定了U盘的其他功能。
例如,U盘的加密功能、防震防摔功能、快速传输功能等都是通过U盘的电路原理来实现的。
其中,加密功能是通过控制芯片和闪存芯片的相互配合来实现的,它可以保护U盘中的数据不被非法访问;而防震防摔功能则是通过U盘的供电电路和时序控制电路来实现的,它可以保护U盘在意外情况下不受损坏;快速传输功能则是通过U盘的控制芯片和数据传输电路的优化设计来实现的,它可以提高U盘的数据传输速度。
总的来说,U盘的电路原理是U盘能够正常工作和具有各种功能的基础。
通过对U盘电路原理的深入了解,我们可以更好地理解U盘的工作原理,也可以更好地选择和使用U盘。
单片机通过CH375读写U盘文件的问题解答
单片机通过CH375读写U盘文件的问题解答单片机通过CH375读写U盘文件的问题解答(转自官网)(发布:2009-9-17 18:07 | 作者:zxgsdu | 来源:本站| 查看:86次| 字号: 小中大* 需要设计参考资料(光盘资料可以参考FILELIST.TXT文档,网上资料更新)USB主机方式的应用可以参考CH375的资料,与计算机连接的USB设备方式(或自己做U盘)可以参考CH372的资料。
如果是读写U盘并且用量较少或者是系统集成,关心快速入门并且简单易用,那么可以参考半成品U盘文件读写模块的说明CH375HM.ZIP;如果是做原始产品设计,关心成本,那么可以参考CH375评估板资料CH375EVT.ZIP,其中有单片机读写U盘的多个例子源程序和U盘文件级子程序库的API说明。
在设计USB-HOST电路和PCB之前,强烈建议参考CH375的USB电路及PCB设计注意事项README.PDF。
常规问题例如不工作/连接失败可以参考CH372的问题解答,关于USB传输速度可以参考评估板中的说明。
* 有关U盘文件的一些基础知识WINDOWS下U盘的文件系统主要有FAT12/FAT16/FAT32,我们的子程序库都能支持,使用角度感觉无区别。
单片机不需要考虑文件系统,只需要了解文件名、文件长度等基础知识。
一个U盘中可以有多个文件,每个文件都是一组数据的集合,以文件名区分和识别。
文件长度是指文件中有效数据的长度,而实际占用的磁盘空间通常大于或者等于文件长度,实际文件数据的存放可能不是连续的,而是通过一组“指针”链接的多个块(也就是分配单元或簇),从而能够根据需要随时增大文件长度以容纳更多数据。
目录是为了便于分类管理,管理者可以人为指定将多个文件归档在一起,例如2004年的文件归到一个目录中。
* 读写U盘中的文件对单片机有要求吗硬件上,单片机需要提供至少600字节的RAM,RAM多些可以提高速度,软件上可以采用我们的子程序库,但是产生的程序代码可能会有几K字节,也就是说单片机的程序空间必须能够放得在几K到十几K的代码。
c代码实现u盘检测的方法 -回复
c代码实现u盘检测的方法-回复U盘是一种便携式存储设备,被广泛应用于文件传输和数据存储。
然而,由于其便携性,U盘也容易成为计算机系统遭受恶意软件和病毒入侵的渠道之一。
为了确保计算机的数据安全,我们需要对插入计算机的U盘进行实时检测。
本文将介绍如何使用C代码实现U盘检测的方法。
首先,我们需要明确的是U盘是通过USB接口与计算机连接的。
因此,我们可以通过检测计算机的USB接口来判断是否存在插入的U盘。
下面是一种使用C代码检测U盘的方法:1. 引入必要的库文件:c#include <windows.h>#include <stdio.h>2. 定义一个检测U盘的函数:cint detectUSB(){int driveType;char driveLetter;char strDrive[] = "A:\\";WIN32_FIND_DATA FindData;从A盘开始检测到Z盘for (driveLetter = 'A'; driveLetter <= 'Z'; driveLetter++) {strDrive[0] = driveLetter;driveType = GetDriveType(strDrive);检测到USB设备if (driveType == DRIVE_REMOVABLE){HANDLE hFind = FindFirstFile(strDrive, &FindData);打印U盘的驱动器号printf("Detected USB Drive: c\n", driveLetter);FindClose(hFind);}}return 0;}3. 在主函数中调用检测函数:cint main(){detectUSB();return 0;}以上代码中的主要思路是通过循环检测计算机的每个驱动器符号,然后使用`GetDriveType`函数判断驱动器的类型。
CH559中文技术手册
8位增强型USB单片机CH559手册版本:1B1、概述CH559芯片是一款兼容MCS51指令集的增强型E8051内核单片机,其79%的指令是单字节单周期指令,平均指令速度比标准MCS51快8~15倍。
CH559支持最高56MHz系统主频,内置64K程序存储器Flash-ROM和256字节内部iRAM以及6K 字节片内xRAM,部分xRAM支持DMA直接内存存取。
CH559内置了ADC模数转换、4组定时器和PWM、双异步串口、双SPI等功能模块,以及内置双端口Root-HUB,支持USB-Host主机模式和USB-Device设备模式。
下面为CH559的内部框图,仅供参考。
Pins: GND VIN5 VDD33 P00~P07 P10~P17 P20~P27 P30~P37 P40~P47 P50/1/4/5/72、特点l Core:增强型E8051内核,兼容MCS51指令集,其79%的指令是单字节单周期指令,平均指令速度比标准MCS51快8~15倍,特有XRAM数据快速复制指令,双DPTR指针。
l ROM:64KB非易失存储器Flash-ROM,支持100K次擦写,可以全部用于程序存储空间;或者可以分为60KB程序存储区和1KB数据存储区以及3KB引导代码BootLoader/ISP程序区。
l RAM:256字节内部iRAM,可以用于快速数据暂存以及堆栈;6KB片内xRAM,可以用于大量数据暂存以及DMA直接内存存取;支持在片外再外扩32KB外部SRAM。
l USB:内嵌USB控制器和双USB收发器,支持USB-Host主机模式和USB-Device设备模式,支持USB 2.0全速12Mbps或者低速1.5Mbps,USB主机模式下可以通过双端口Root-HUB同时管理两个USB设备。
支持最大64字节数据包,内置FIFO,支持DMA。
l Timer:4组定时器,T0/T1/T2为标准MCS51定时器;T2扩展为支持2路信号捕捉;TMR3内置8级FIFO,支持DMA,支持信号捕捉采样和16位PWM输出。
8位增强型USB单片机CH558
1
8 位增强型 USB 单片机 CH558
手册 版本:1.4
1、概述
CH558 芯片是一款兼容 MCS51 指令集的增强型 E8051 内核单片机, 其 79%的指令是单字节单周期 指令,平均指令速度比标准 MCS51 快 8~15 倍。 CH558 支持最高 56MHz 系统主频, 内置 40K 程序存储器 Flash-ROM 和 256 字节内部 iRAM 以及 4K 字节片内 xRAM,xRAM 支持 DMA 直接内存存取。 CH558 内置了 ADC 模数转换、4 组定时器和 PWM、双异步串口、SPI、USB 设备控制器和全速收发 器等功能模块。 下面为 CH558 的内部框图,仅供参考。
l l l l l
3、封装
48 47 46 45 44 43 42 41 40 39 38 37 1 2 3 4 5 6 7 8 9 10 11 12 P1.5/AIN5/MOSI P1.4/AIN4/SCS P1.3/AIN3 P1.2/AIN2/PWM3/CAP3 P1.1/AIN1/T2EX/CAP2 P1.0/AIN0/T2/CAP1 VDD33 VIN5 P0.0/AD0/UDTR P0.1/AD1/URTS P0.2/AD2/RXD_ P0.3/AD3/TXD_
速度比标准 MCS51 快 8~15 倍,特有 XRAM 数据快速复制指令,双 DPTR 指针。 ROM:40KB 非易失存储器 Flash-ROM,支持 100K 次擦写,分为 32KB 应用程序存储区和 5KB 数 据存储区以及 3KB 引导代码 BootLoader/ISP 程序区。 RAM:256 字节内部 iRAM,可以用于快速数据暂存以及堆栈;4KB 片内 xRAM,可以用于大量数 据暂存以及 DMA 直接内存存取;支持在片外再外扩 32KB 外部 SRAM。 USB:内嵌 USB 控制器和 USB 收发器,支持 USB-Device 设备模式,支持 USB 2.0 全速 12Mbps 或者低速 1.5Mbps。支持最大 64 字节数据包,内置 FIFO,支持 DMA。 Timer:4 组定时器,T0/T1/T2 为标准 MCS51 定时器;T2 扩展为支持 2 路信号捕捉;TMR3 内置 8 级 FIFO,支持 DMA,支持信号捕捉采样和 16 位 PWM 输出。 UART: 2 组异步串口, UART0 为标准 MCS51 串口; UART1 兼容 16C550, 内置 8 级 FIFO, 支持 Modem 信号,支持 RS485 半双工模式,支持预置本机地址用于多机通讯时自动匹配。
单片机读写优盘
1前言随着计算机技术的快速发展,USB(Universal Serial Bus)存储设备的使用已经非常普遍,USB用于将适用USB的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构;是一种快速、灵活的总线接口[5]。
它最大的特点是易于使用,主要是用在中速和低速的外设。
随着USB规范的完善和成熟,USB外设的种类不断丰富,应用领域也不断扩大。
在传统的应用中,主要是PC扮演着主机的角色。
根据USB的规范,可以看到在USB的拓朴结构中居于核心地位的是主机,每一次的数据传输都必须由主机发起和控制。
但是随着单片机产品应用领域的日益增长,USB外设的应用范围也随之扩大,为此在单片机系统中实现对USB 外设控制也变得日益迫切。
因此在一些需要转存数据的设备,仪器上使用USB移动存储设备接口的芯片便相继产生了,CH375就是其中之一,它是一个USB总线的通用接口芯片,支持HOST主机方式和SLAVE设备方式[4].如今的USB就象当日的R232,最终发展必是业界的主流外设接口技术。
USB有着其它接口不可替代的优势[12].随着USB技术的发展,计算机的移动存储介质普遍采用U盘或移动硬盘。
如今,USB技术已经越来越普及和成熟,低成本、高稳定性、较高的数据传输速率和即插即用的方便性,使其备受硬件厂商的青睐。
随着数据采集和单片机用户对移动存储的需求越来越大,具有USB接口的存储设备以其优异的性价比和灵活性常用来进行数据的存储和交换,所以在单片机系统中实现对优盘或移动硬盘的直接读写是非常有价值的[6]。
介绍了一种USB总线的通用接口芯片CH375,并在此基础上提出了一种外部单片机读写U 盘的基本方法及其硬件连接方法。
单片机只要在原硬件系统中增加1个CH375芯片就可以直接调用CH375提供的子程序库来直接读取U盘中的数据,从而实现了普通单片机与U盘的通讯、方法简单、便于操作、综合成本比较低,具有较大的推广应用价值[10]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USB单片机CH559实现U盘控制器应用实例
一、摘要
根据Mass Storage Class(大容量/海量存储器,以下简称MSC)协议,使用CH558、CH559和CH563分别实现模拟全速和高速U盘的功能,外部存储介质和U盘容量支持自由调整,用以解决数据转存或者定制U盘等功能。
关键在于CH5XX USB设备控制器操作、Bulk-Only传输协议、SCSI命令支持和存储介质读写这几个部分。
二、总体概述
模拟U盘关键功能部件包括以下几点:
(1)、USB Mass Storage Framework
(2)、以U盘为例,下图是PC和U盘的内部抽象逻辑框图
CH558、CH559和CH563内置USB设备控制器和PHY,对于实现U盘控制器的应用,只需要配置USB设备模式和读写外部存储介质。
(3)、USB MSC CBI/BBB Transport
USB MSC Control/Bulk/Interrupt Transport 只能用于Full-speed的软盘(Floppy drive),这里不赘述,有兴趣可以自己百度。
Bulk-only传输类控制、批量都是通过批量端点,即用Bulk端点来传送命令块,数据,状态,因此,才类似于Control/Bulk/Interrupt被简称为CBI一样,而Bulk/Bulk/Bulk被简称为BBB。
(4)、USB MSC Protocol relation
传输通讯:Host和Device之间的数据通讯根据存储介质(Floppy或Flash)分别使用UFI和SCSI协议,更深入的设备特性配置参考More Feature。
(5)、U盘配置描述符Class,Subclass和Protocol对应关系
对应的,了解USB的都知道,每个设备的描述符中,都有对应下面这几个域:bInterfaceClass 、 bInterfaceSubClass 、 bInterfaceProtocol
分别对应着USB的Class,Subclass,Protocol。
而对于我们此处的U盘:
bInterfaceClass=0x08=Mass Storage,Class就是USB Mass Storage Class,bInterfaceSubClass=0x06=SCSI Transparent,Subclass,所支持的列表如下:
SubClass Codes Mapped to Command Block Specifications
bInterfaceProtocol=0x50=Bulk Only Transport,Protocol,所支持的列表如下:
Mass Storage Transport Protocol
(6)、MSC使用的SCSI命令集
0x00 TestUnitReady 0x03RequestSense
0x12Inquiry 0x1A ModeSense6
0x1B StartStop 0x1E MediumRemoval
0x23 ReadFormatCapacity 0x25 ReadCapacity
0x28 Read(10) 0x2A Write(10)
0x2F Verify 0x5A ModeSense10
SCSI命令使用各位可以阅读代码,或者去USB-IF搜索SCSI协议,实际上U盘所使用的所有SCSI命令集都可以参考UFI文档,它比SCSI标准文档更简洁明了。
(7)、Bulk-Only传输协议
详细的规范请阅读《Universal Serial BusMass Storage ClassBulk-Only Transport》)设备插入到USB 后,USB 即对设备进行搜索,并要求设备提供相应的描述符。
在USBHost 得到上述描述符后,即完成了设备的配置,识别出为Bulk-Only 的Mass Storage 设备,然后即进入Bulk-Only 传输方式。
在此方式下,USB 与设备间的所有数据均通过Bulk-In和Bulk-Out 来进行传输,不再通过控制端点传输任何数据。
在这种传输方式下,有三种类型的数据在USB 和设备之间传送,CBW、CSW 和普通数据。
CBW(Command Block Wrapper,即命令块包)是从USB Host 发送到设备的命令,命令格式遵从接口中的bInterfaceSubClass 所指定的命令块,这里为SCSI 传输命令集。
USB 设备需要将SCSI 命令从CBW 中提取出来,执行相应的命令,完成以后,向Host 发出反映
当前命令执行状态的CSW(Command Status Wrapper),Host 根据CSW 来决定是否继续发送下一个CBW 或是数据。
Host 要求USB 设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发出CSW,以使Host 进行下一步的操作。
USB 设备所执行的操作可用下图描述
CBW和CSW命令包格式在程序里面有或者参看Bulk-Only协议。
三、硬件设计
CH558、CH559模拟U盘使用的SPI接口的串行Flash,硬件如下图:
CH558,CH559是增强型51内核的全速(12Mbps)USB单片机,内置晶振,芯片外围也足够简洁。
CH563是32位高速USB MCU,内置网络PHY和协议栈。
芯片资源如下图:
四、软件设计
软件主要包括以下方面:
(1)、USB设备模式初始化
(2)、存储芯片接口初始化
(3)Bulk_Only传输
CBW包:
CSW包:
五、可拓展功能
(1)、其他存储介质:除了以上提到的SPI接口的串行Flash,也可以替换成EEPROM或者Nand falsh等非掉电易失存储介质。
(2)、数据来源可以随意指定,比如串口数据流,并口数据流,甚至其他温湿度传感器设备等。
(3)、CH559+SPI串行Flash模拟U盘测试参数
六、应用场合
应用的典型场合,比如:
(1)、代替光盘为客户提供说明书,可以将说明资料直接放到板子的存储介质内。
(2)、U盘数据监控、截取和加密。
(3)、采集数据数据暂存,方便拷贝到主机。
(4)、定制U盘等。
七、源码
CH558、CH559模拟USB1.1 全速U盘的源码(C语言):
CH563模拟USB2.0高速U盘的源码(C语言):。