多媒体卡MMC(MultiMedia Card)是由美国SanDisk 公司和德国Simens 公司于1997 年共 同开发推出的一种多功能存储卡。内置控制电路,可以使用在手机、数码相机、MP3、PDA 等多种数字设备上,可反复记录30 万次。现在市场上的主流容量有128 MB~2 GB。 文中首先介绍单片机对SPI 协议下的MMC 卡的底层读写操作,然后分析MMC 卡文件系统 的结构,最后详细说明MMC 卡文件的创建、读写、删除等操作。该方法可应用到与Window s 有交互的嵌入式系统中,便于文件的统一管理。
上传时间: 2013-11-05
上传用户:lionlwy
突然有兴趣想研究一下 FAT32 格式到底是怎么存文件的了。先去网上google 一下发现资料都是copy 的,对我这个超级菜鸟如同看天书,还是自己摸索好点。 先去下载个看文件系统的工具,我用的是winhex 没有破解,但是重要的硬盘的 信息是可以看到的。为方便起见,我用U 盘来研究文件系统。手头买了一个79 元的1G 的U 盘。先格式化为FAT32 格式。然后用winhex 打开。然后就是一堆 的………。头大。 本着先易后难的原则,先在U 盘只放一个短文件名的文件:study.txt.内容就 放:0123456789 好了, 就十个字节的数
上传时间: 2014-12-26
上传用户:牛津鞋
从今天开始,我们的课程终于进入F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学习2812的片内资源,初步了解它究竟有哪些本事,能拿来干些什么,然后一起了解2812存储器的结构,统一编址的方式、存储器映射关系,并重点分析CMD文件,以期望消除大家对CMD文件的迷惑,在自己编写程序的时候会修改CMD文件中的部分内容,从而满足自己设计时的需求。
上传时间: 2013-10-30
上传用户:feitian920
概述 CH376是文件管理控制芯片,用于单片机系统读写 U 盘或者 SD 卡中的文件。 CH376 支持 USB 设备方式和 USB 主机方式,并且内置了 USB 通讯协议的基本固件,内置了处理Mass-Storage 海量存储设备的专用通讯协议的固件,内置了SD 卡的通讯接口固件,内置了FAT16和FAT32 以及 FAT12 文件系统的管理固件,支持常用的 USB 存储设备(包括 U 盘/USB 硬盘/USB 闪存盘/USB读卡器)和SD卡(包括标准容量SD 卡和高容量HC-SD 卡以及协议兼容的MMC 卡和 TF 卡)。 CH376 支持三种通讯接口:8 位并口、SPI 接口或者异步串口,单片机/DSP/MCU/MPU 等控制器可以通过上述任何一种通讯接口控制CH376芯片,存取U 盘或者 SD 卡中的文件或者与计算机通讯。 CH376的 USB设备方式与CH372 芯片完全兼容,CH376 的 USB 主机方式与CH375 芯片基本兼容。
上传时间: 2014-12-27
上传用户:sglccwk
AVR单片机在线编程下载线电路图,PCB图及HEX文件 什么是AVR单片机?AVR单片机是什么意思?
上传时间: 2013-11-23
上传用户:笨小孩
Proteus6.9和Keil联调方法及破解文件下载:方法:1.安装proteus6.9和keil吧2.安装压缩包里面的vdmagdi.exe文件,安装完后keil\c51\bin\文件夹里面会有VDM51.DLL这个.3.把压缩包里面的PROSPICE.DLL复制到Proteus6Professional\bin目录下,覆盖已经有的.4.打开keil,打开optionfortarget里面的debug选项卡,选择ProteusVSMSimulator,并进行相关设置.(两台计算机联调得输入正确的host IP和port号)5,打开isis,选择debug\useremotedebugmonitor.这样就可以啦,试试看吧!
上传时间: 2013-10-15
上传用户:wenwiang
如何导入ASM文件到工程(视频教程)
上传时间: 2013-10-22
上传用户:胡萝卜酱
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943
USB2.0转IDE的电路图为protel文件格式的文档原理图。
上传时间: 2013-10-11
上传用户:tianyi223
AVR Studio 帮助文件中文翻译,网友翻译的AVR Studio软件里面的帮助文件。转自“我们的AVR”网站,在此表示感谢。 图元文件(metafile) 以.emf为扩展名的文件。是下面各种结构的基本组成部分,可以用来让AVR LCD编辑器设计软件模拟显示器。它可以是一个段或者一个图像。您不能直接用AVR LCD编辑器生成一个这样的图元文件。但是可以使用第三方软件。Companion Software的Metafile Companion和Microsoft Visio 就是两个让用户自己定义图元文件的软件。在市场上有好多更简单,更便宜的转换软件支持gif,jpeg,bmp等的文件转换成.emf文件。 (例如:www.harmware.com 网站上的Batch Thumb 、和www.irfanview.com网站上的IrfanView). 段(segment)这是软件模拟显示器的一部分。用LCD编辑器您可以分配所有的段对应到实际的LCD寄存器的位上。段被存成.emf文件。图像(image)被用作背景图像和外围图像的图元文件。充当所有段的布景。这些对象是“静态”的,不对任何LCD寄存器值有反映。图像也被存成.emf文件。 模拟显示器(display)多层的元文件和图像的组合。它包含LCD 寄存器的分配信息。用XML格式保存成.dis文件。组(group)为了简化设计,需要频繁的保存使用段。组就是同一层中一些段(图元文件)的集合。它的设计没有实际的限制,但是不能包括静态图像(背景/前景)。最典型的组就是7段码数字字型。组只是理论的设计工具,在最终的模拟显示器文件中是没有组存在的。组用扩展名为.pri 的文件保存。 对象(object)对包括以上各个元件的各种事物的称谓的术语。模拟显示器文件(display file)以.dis为扩展名的XML类型的文件。包含了所有的关于显示器的信息。
上传时间: 2013-10-31
上传用户:paladin