搜档网
当前位置:搜档网 › 基于嵌入式ARM的SD卡的读写

基于嵌入式ARM的SD卡的读写

基于嵌入式ARM的SD卡的读写
基于嵌入式ARM的SD卡的读写

摘要

SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。本实训的作品是利用基于ARM Cotex-M3内核的嵌入式处理器STM32自带的SDIO硬件接口来驱动SD卡,并结合文件系统 FATFS R0.07C来完成一个基于嵌入式ARM的SD卡读写的作品,现实向SD 卡写入一个txt文件,并读取SD卡的文件目标并通过串口打印到PC机显示。

关键词:嵌入式;ARM;STM32;SD卡;文件系统

Abstract

SD Card (Secure Digital Memory Card) Chinese translation for Secure Digital Card, it is a kind of based on semiconductor flash Memory of a new generation of Memory device, it is widely used in portable devices, such as Digital cameras, personal Digital assistant (PDA) and multimedia player, etc. This training work is based on ARM Cotex - M3 kernel embedded processor STM32 own SDIO hardware interface to drive the SD card, and combined with the file system FATFS R0.07 C to complete a based on embedded ARM of the SD card, speaking, reading and writing work, reality to SD card to a TXT file, and read SD card file goals and through the serial port print to PC display.

Key words:embedded;ARM;STM32; SD Card; File system

目录

1 前言 (1)

1.1ARM应用背景 (1)

1.2研究内容 (2)

1.3研究成果 (3)

2 STM32处理器概述 (3)

2.1STM32简介 (3)

2.1.1 STM32F103VET6的参数 (4)

2.2内部资源 (6)

2.3C ORTEX-M3内核简介 (6)

2.4STM32SDIO简介 (7)

2.4.1 SDIO简介 (7)

2.4.2 SDIO功能特性 (8)

3 SDIO的原理及实现方法 (8)

3.1原理 (9)

3.2SDIO适配器 (10)

3.3SDIO卡识别过程 (11)

3.4SDIO写数据块 (12)

3.5SDIO读数据块 (13)

4 FATFS文件系统 (13)

4.1F A T FS文件系统简介 (13)

4.2F A T FS文件系统移植 (14)

4.2.1移植前工作 (14)

4.2.2开始移植 (14)

5 测试及结果 (15)

5.1JTAG仿真器介绍 (16)

5.2现象及结果 (16)

6 结论 (18)

致谢 (19)

参考文献 (20)

1 前言

1.1 ARM应用背景

如今,学习一种处理器的就有许多ARM内核的处理器可供使用,现在社会已步入嵌入式学习阶段。在嵌入式领域,8位处理器已经不再胜任一些复杂的应用,比如GUI,TCP/IP,FILESYSTEM等,而ARM芯片凭借强大的处理能力和极低的功耗,非常适合这些场合。现在越来越多的产品在选型的时候考虑到使用ARM处理器,ARM的应用是相当的广泛。

ARM的嵌入式控制应用如:汽车、电子设备、保安设备、大容量存储器、调制解调器、打印机等。一个典型的ARM嵌入式工业控制系统的功能模块如图1-1所示。

图1-1 ARM嵌入式工业控制系统的功能模块

目前已有超过85%的无线通信设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固。ARM在此方面的应用如:手提式计算机、移动电话、PDA等。

随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上进行了优化,并获得广泛支持。

ARM技术在目前流行的数字音频播放器、数字机顶盒、游戏机、数码相机、数字式电视机、GPS、机顶盒中得到广泛采用。现在流行的数码相机和打印机中绝大部分采用ARM技术,手机中的32位SIM智能卡也采用了ARM技术。如图1-2所示是基于ARM技术的数码相机的功能模块[9]。

1.2 研究内容

本设计旨在加深对ARM的学习,巩固大学四年所学专业知识,提升动手能力和思考问题解决问题的能力。本设计选择意法半导体的STM32F103系列处理器,通过自制STM32开发板的过程,和对STM32F103C8T6芯片的研究学习,掌握其各种外设功能。

STM32F103VET6具有一个SDIO接口。SD/SDIO/MMC主机接口可以支持MMC卡系统规范4.2版中的3个不同的数据总线模式:1位(默认)、4位和8位。在8位模式下,该接口可以使数据传输速率达到48MHz,该接口兼容SD存储卡规范2.0版。SDIO 存储卡规范2.0版支持两种数据总线模式:1位(默认)和4位。

目前的芯片版本只能一次支持一个SD/SDIO/MMC 4.2版的卡,但可以同时支持多个MMC 4.1版或之前版本的卡。除了SD/SDIO/MMC,这个接口完全与CE-ATA 数字协议版本1.1兼容。

本实训的作品是利用基于ARM Cotex-M3内核的嵌入式处理器STM32自带的SDIO硬件接口来驱动SD卡,并结合文件系统 FATFS R0.07C来完成一个基于嵌入式ARM的SD卡读写的作品,现实向SD卡写入一个txt文件,并读取SD卡的文件目标并通过串口打印到PC机显示。

本文第一章讲述了该论文写作背景,主要阐述了ARM应用范畴,以及该论文研究的内容;第二章讲述了该研究课题使用的核心芯片STM32F103VET6的各项参

数;第三章着重介绍了SDIO的原理及实现方法;第四章着重介绍了FAT文件系统的原理;第五章介绍了测试方法和结果。

1.3 研究成果

给硬件系统供电(5V),插上JLINK,插上串口线(两头都是母的交叉线),插上MicroSD卡,打开超级终端,配置超级终端为115200 8-N-1,将编译好的程序下载到硬件平台,即可看到超级终端打印出如下信息:

图1-3 显示结果图

2 STM32处理器概述

2.1 STM32简介

STM32F103xx增强型系列使用高性能的ARM/Cortex-M3/32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC 、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。

STM32F103xx增强型系列工作于-40℃至+105 ℃的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。

完整的STM32F103xx增强型系列产品包括从36脚至100脚的五种不同封装

形式;根据不同的封装形式,器件中的外设配置不尽相同。下面给出了该系列产品中所有外设的基本介绍。

这些丰富的外设配置,使得STM32F103xx增强型微控制器适合于多种应用场合:

·电机驱动和应用控制;

·医疗和手持设备;

·PC外设和GPS平台;

·工业应用:可编程控制器、变频器、打印机和扫描仪;

·警报系统,视频对讲,和暖气通风空调系统;

2.1.1 STM32F103VET6的参数

STM32F103VET6芯片的参数如表2-1

表2-1 器件功能和配置(STM32F103xx 增强型)

芯片引脚图如图2-2:

图2-2 STM32F103xx增强型LQPFP100管脚图

2.2 内部资源

STM32有丰富的内部资源,如下所示:

·RealView MDK(Miertocontroller Development Kit)基于ARM微控制器的专业嵌入式开发工具;

·内置闪存存储器;

·内置SRAM;

·嵌套的向量式中断控制器(NVIC);

·外部中断/事件控制器(EXTI);

·时钟和启动;

·自举模式;

·DMA ;

·RTC(实时时钟)和后备寄存器;

·窗口看门狗;

·I2C总线;

·通用同步/异步接受发送器(USART);

·串行外设接口(SPI);

·控制器区域网络(CAN) ;

·通用串行总线(USB);

·通用输入输出接口(GPIO);

·ADC(模拟/数字转换器) ;

·温度传感器;

·串行线JTAG调试口(SWJ-DP)。

2.3 Cortex-M3内核简介

Cortex-M3内核包含一个适用于传统Thumb和新型Thumb-2指令的译码器、一个支持硬件乘法和硬件除法的先进ALU、控制逻辑和用于连接处理器其他部件的接口。Cortex-M3处理器是首款基于ARMv7-M架构的ARM处理器。中央Cortex-M3内核使用3级流水线哈佛架构,运用分支预测、单周期乘法和硬件除

法功能实现了出色的效率(1.25DMIPS/MHz)。Cortex-M3处理器是一个32位处理器,带有32位宽的数据路径、寄存器库和基于传统ARM7处理器的系统只支持访问对齐的数据,沿着对齐的字边界即可对数据进行访问和存储。Cortex-M3处理器采用非对齐数据访问方式,使非对齐数据可以在单核访问中进行传输。

Cortex-M3处理器是专为那些对成本和功耗非常敏感但同时对性能要求又相当高的应用而设计的。凭借缩小的内核尺寸和出色的中断延迟性能、集成的系统部件、灵活的配置、简单的高级编程和强大的软件系统,Cortex-M3处理器将成为从复杂的芯片系统到低端微控制器等各种系统的理想解决方案。表2-3为Cortex-M3处理器与ARM7作比较。

表2-3 Cortex-M3与ARM7相比较

2.4 STM32 SDIO简介

2.4.1 SDIO简介

STM32F103VET6具有一个SDIO接口。SD/SDIO/MMC主机接口可以支持MMC卡系统规范4.2版中的3个不同的数据总线模式:1位(默认)、4位和8位。

在8位模式下,该接口可以使数据传输速率达到48MHz,该接口兼容SD存储卡规范2.0版。SDIO存储卡规范2.0版支持两种数据总线模式:1位(默认)和4位。

目前的芯片版本只能一次支持一个SD/SDIO/MMC 4.2版的卡,但可以同时支持多个MMC 4.1版或之前版本的卡。除了SD/SDIO/MMC,这个接口完全与CE-ATA数字协议版本1.1兼容。

2.4.2 SDIO功能特性

(1)主要功能

SD/SDIO MMC卡主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、SD 存储卡、SDIO卡和CE-ATA设备间提供了操作接口。

多媒体卡系统规格书由MMCA技术委员会发布,可以在多媒体卡协会的网站上(https://www.sodocs.net/doc/e113487308.html,)获得。

CE-ATA系统规格书可以在CE-ATA工作组的网站上(https://www.sodocs.net/doc/e113487308.html,)获得。

SDIO的主要功能如下:

●与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。

●与较早的多媒体卡系统规格版本全兼容(向前兼容)。

●与SD存储卡规格版本2.0全兼容。

●与SD I/O卡规格版本2.0全兼容:支持良种不同的数据总线模式:1位(默认)和4位。

●完全支持CE-ATA功能(与CE-ATA数字协议版本1.1全兼容)。

●8位总线模式下数据传输速率可达48MHz。

●数据和命令输出使能信号,用于控制外部双向驱动器。

(2)SDIO总线拓扑

总线上的通信是通过传送命令和数据实现。

在多媒体卡/SD/SD I/O总线上的基本操作是命令/响应结构,这样的总线操作在命令或总线机制下实现信息交换;另外,某些操作还具有数据令牌。

在SD/SDIO存储器卡上传送的数据是以数据块的形式传输;在MMC上传送的数据是以数据块或数据流的形式传输;在CE-ATA设备上传送的数据也是以数据块的形式传输。

3 SDIO的原理及实现方法

3.1 原理

SDIO包含2个部分:

●SDIO适配器模块:实现所有MMC/SD/SD I/O卡的相关功能,如时钟的产生、命令和数据的传送。

●AHB总线接口:操作SDIO适配器模块中的寄存器,并产生中断和DMA 请求信号。

图3-1 SDIO框图

复位后默认情况下SDIO_D0用于数据传输。初始化后主机可以改变数据总线的宽度。

如果一个多媒体卡接到了总线上,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。MMC版本V3.31和之前版本的协议只支持1位数据线,所以只能用SDIO_D0。

如果一个SD或SD I/O卡接到了总线上,可以通过主机配置数据传输使用SDIO_D0或SDIO_D[3:0]。所有的数据线都工作在推挽模式。

SDIO_CMD有两种操作模式:

●用于初始化时的开路模式(仅用于MMC版本V3.31或之前版本)

●用于命令传输的推挽模式(SD/SD I/O卡和MMC V4.2在初始化时也使用推挽驱动)

SDIO_CK是卡的时钟:每个时钟周期在命令和数据线上传输1位命令或数据。对于多媒体卡V3.31协议,时钟频率可以在0MHz至20MHz间变化;对于多媒体卡V4.0/4.2协议,时钟频率可以在0MHz至48MHz间变化;对于SD或SD I/O卡,时钟频率可以在0MHz至25MHz间变化。

SDIO使用两个时钟信号:

●SDIO适配器时钟(SDIOCLK=HCLK)

●AHB总线时钟(HCLK/2)

下表适用于多媒体卡/SD/SD I/O卡总线:

表3-1 SDIO引脚定义

3.2 SDIO适配器

下图是简化的SDIO适配器框图:

图3-2 SDIO适配器

●命令通道状态机(CPSM)

当写入命令寄存器并设置了使能位,开始发送命令。命令发送完成时,命令通道状态机(CPSM)设置状态标志并在不需要响应时进入空闲状态(见下图)。当收到响应后,接收到的CRC码将会与内部产生的CRC码比较,然后设置相应的状态标志。当进入等待(Wait)状态时,命令定时器开始运行;当CPSM进入接收(Receive)状态之前,产生了超时,则设置超时标志并进入空闲(Idle)状态。

●命令格式

命令:命令是用于开始一项操作。主机向一个指定的卡或所有的卡发出带地址的命令或广播命令(广播命令只适合于MMC V3.31或之前的版本)。命令在CMD线上串行传送。所有命令的长度固定为48位,下表给出了多媒体卡、SD 存储卡和SDIO卡上一般的命令格式。CE-ATA命令是MMC V4.2命令的扩充,所以具有相同的格式。命令通道操作于半双工模式,这样命令和响应可以分别

发送和接收。如果CPSM不处在发送状态,SDIO_CMD输出处于高阻状态。SDIO_CMD上的数据与SDIO_CK的上升沿同步。

3.3 SDIO卡识别过程

多媒体卡和SD卡的卡识别过程是有区别的;对于多媒体卡,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为开路驱动,允许在这个过程中的卡的并行连接,识别过程如下:

1. 总线被激活

2. SDIO卡主机广播发送SEND_OP_COND(CMD1)命令,并接收操作条件

3. 得到的响应是所有卡的操作条件寄存器内容的“线与”

4. 不兼容的卡会被置于非激活状态

5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡

6. 所有激活的卡同时串行地发送他们的CID号,那些检测到输出的CID位与命令线上的数据不相符的卡必须停止发送,并等待下一个识别周期。最终只有一个卡能够成功地传送完整的CID至SDIO卡主机并进入识别状态。

7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令至这个卡,这个新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态,并不再响应新的识别过程,同时它的输出驱动从开路转变为推挽模式。

8. SDIO卡主机重复上述步骤5至7,直到收到超时条件。

对于SD卡而言,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为推挽驱动而不是开路驱动,识别过程如下:

1. 总线被激活

2. SDIO卡主机广播发送SEND_APP_OP_COND(ACMD41)命令

3. 得到的响应是所有卡的操作条件寄存器的内容

4. 不兼容的卡会被置于非激活状态

5. SDIO卡主机广播发送ALL_SEND_CID(CMD2)至所有激活的卡

6. 所有激活的卡发送回他们唯一卡识别号(CID)并进入识别状态。

7. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态。SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。

8. SDIO卡主机对所有激活的卡重复上述步骤5至7。

对于SD I/O卡而言,卡识别过程如下:

1. 总线被激活

2. SDIO卡主机发送IO_SEND_OP_COND(CMD5)命令

3. 得到的响应是卡的操作条件寄存器的内容

4. 不兼容的卡会被置于非激活状态

5. SDIO卡主机发送SET_RELATIVE_ADDR(CMD3)命令和一个地址到一个激活的卡,这个新的地址被称为相对卡地址(RCA),它比CID短,用于对卡寻址。至此,这个卡转入待机状态。SDIO卡主机可以再次发送该命令更改RCA,卡的RCA将是最后一次的赋值。

3.4 SDIO写数据块

执行写数据块命令(CMD24-27)时,主机把一个或多个数据块从主机传送到卡中,同时在每个数据块的末尾传送一个CRC码。一个支持写数据块命令的卡应该始终能够接收由WRITE_BL_LEN定义的数据块。如果CRC校验错误,卡通过SDIO_D信号线指示错误,传送的数据被丢弃而不被写入,所有后续(在多块写模式下)传送的数据块将被忽略。

如果主机传送部分数据,而累计的数据长度未与数据块对齐,当不允许块错位(未设置CSD的参数WRITE_BLK_MISALIGN),卡将在第一个错位的块之前检测到块错位错误(设置状态寄存器中的ADDRESS_ERROR错误位)。当主机试图写一个写保护区域时,写操作也会被中止,此时卡会设置WP_VIOLATION位。

设置CID和CSD寄存器不需要事先设置块长度,传送的数据也是通过CRC 保护的。如果CSD或CID寄存器的部分是存储在ROM中,则这个不能更改的部分必须与接收缓冲区的对应部分相一致,如果有不一致之处,卡将报告一个错误同时不修改任何寄存器的内容。有些卡需要长的甚至不可预计的时间完成写一个数据块,在接收一个数据块并完成CRC检验后,卡开始写操作,如果它的写缓冲区已经满并且不能再从新的WRITE_BLOCK命令接受新的数据时,它会把SDIO_D信号线拉低。主机可以在任何时候使用SEND_STATUS(CMD13)查询卡的状态,卡将返回当前状态。READY_FOR_DATA状态位指示卡是否可以接受新的数据或写操作是否还在进行。主机可以使用CMD7(选择另一个卡)不选中某个卡,而把这个卡置于断开状态,这样可以释放SDIO_D信号线而不中断未完成的写操作;当重新选择了一个卡,如果写操作仍然在进行并且写缓冲区仍不能使用,它会重新通过拉低SDIO_D信号线指示忙的状态。

3.5 SDIO读数据块

在读数据块模式下,数据传输的基本单元是数据块,它的大小在CSD中(READ_BL_LEN)定义。如果设置了READ_BL_PARTIAL,同样可以传送较小的数据块,较小数据块是指开始和结束地址完全包含在一个物理块中,READ_BL_LEN定义了物理块的大小。为保证数据传输的正确,每个数据块后都有一个CRC校验码。CMD17(READ_SINGLE_BLOCK)启动一次读数据块操作,在传输结束后卡返回到发送状态。

CMD18(READ_MULTIPLE_BLOCK)启动一次连续多个数据块的读操作。

主机可以在多数据块读操作的任何时候中止操作,而不管操作的类型。发送停止传输命令即可中止操作。

如果在多数据块读操作中(任一种类型)卡检测到错误(例如:越界、地址错位或内部错误),它将停止数据传输并仍处于数据状态;此时主机必须发送停止传输命令中止操作。在停止传输命令的响应中报告读错误。

如果主机发送停止传输命令时,卡已经传输完一个确定数目的多个数据块操作中的最后一个数据块,因为此时卡已经不在数据状态,主机会得到一个非法命令的响应。如果主机传输部分数据块,而累计的数据长度不能与物理块对齐同时不允许块错位,卡会在出现第一个未对齐的块时检测出一个块对齐错误,并在状态寄存器中设置ADDRESS_ERROR错误标志。

4 FatFS文件系统

4.1 FatFS文件系统简介

FAFFS是面向小型嵌入式系统的一种通用的FAT文件系统。FATFS完全是由AISI C语言编写并且完全独立于底层的I/O介质。因此它可以很容易地不加修改地移植到其他的处理器当中,如8051、PIC、A VR、SH、Z80、H8、ARM 等。FATFS支持FAT12、FAT16、FAT32等格式,所以我们利用前面写好的SDIO 驱动,把FATFS文件系统代码移植到工程之中,就可以利用文件系统的各种函数,对已格式化的SD卡进行读写文件了。

4.2 FatFS文件系统移植

4.2.1移植前工作

在移植FATFS文件系统之前,我们先要到FAT的官网获取源码,版本为R0.07C。解压之后可看到里面有doc 和src 这两个文件夹。doc 文件夹里面是一些使用文档,src 里面是文件系统的源码。

图4-1 FATFS源码

4.2.2开始移植

首先我们要获取一个完全没有修改过的文件系统源码,然后在10-MicroSD 卡这个文件夹下的实验代码下移植,这个实验代码实现的是卡的底层的块操作。注意,我们在移植这个文件系统的过程中会尽量保持文件系统源码的纯净,尽量做到在修改最少量的源码的情况下移植成功。

FATFS模块在移植的时候,我们一般只需要修改2个文件,即ffconf.h和diskio.c。FATFS模块的所有配置项都是存放在ffconf.h里面,我们可以通过配置里面的一些选项,来满足自己的需求。接下来我们介绍几个重要的配置选项。

1)_FS_TINY。这个选项在R0.07版本中开始出现,之前的版本都是以独立的C文件出现(FATFS和Tiny FATFS),有了这个选项之后,两者整合在一起了,使用起来更方便。我们使用FATFS,所以把这个选项定义为0即可。

2)_FS_READONLY。这个用来配置是不是只读,本章我们需要读写都用,所以这里设置为0即可。

3)_USE_STRFUNC。这个用来设置是否支持字符串类操作,比如f_putc,f_puts等,本章我们需要用到,故设置这里为1。

4)_USE_MKFS。这个用来定时是否使能格式化,本章需要用到,所以设置这里为1。

5)_USE_FASTSEEK。这个用来使能快速定位,我们设置为1,使能快速定位。

6)_CODE_PAGE。这个用于设置语言类型,包括很多选项(见FATFS官网说明),我们这里设置为936,即简体中文(GBK码,需要c936.c文件支持,该文件在option文件夹)。

7)_USE_LFN。该选项用于设置是否支持长文件名(还需要_CODE_PAGE 支持),取值范围为0~3。0,表示不支持长文件名,1~3是支持长文件名,但是存储地方不一样,我们选择使用3,通过ff_memalloc函数来动态分配长文件名的存储区域。

8)_VOLUMES。用于设置FATFS支持的逻辑设备数目,我们设置为2,即支持2个设备。

9)_MAX_SS。扇区缓冲的最大值,一般设置为512。

下面我们来讲讲FATFS的移植,FATFS的移植主要分为3步:

①数据类型:在integer.h 里面去定义好数据的类型。这里需要了解你用的编译器的数

据类型,并根据编译器定义好数据类型。

②配置:通过ffconf.h配置FATFS的相关功能,以满足你的需要。

③函数编写:打开diskio.c,进行底层驱动编写,一般需要编写6 个接口函数。

通过以上三步,我们即可完成对FATFS的移植。

第一步,我们使用的是MDK3.80a编译器,器数据类型和integer.h里面定义的一致,所以此步,我们不需要做任何改动。

第二步,关于ffconf.h里面的相关配置,我们在前面已经有介绍(之前介绍的9个配置),我们将对应配置修改为我们介绍时候的值即可,其他的配置用默认配置。

第三步,因为FATFS模块完全与磁盘I/O 层分开,因此需要下面的函数来实现底层物理磁盘的读写与获取当前时间。底层磁盘I/O 模块并不是FATFS的一部分,并且必须由用户提供。

5 测试及结果

5.1 JTAG仿真器介绍

J-Link是支持仿真ARM内核芯片的JTAG仿真器。配合IAR EWARM,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。

DQ电子推出的J-LinkV7仿真器采用原版固件,参照原版原理图,经过DQ 团队的长时间精工制作,板型合理,元件布局美观大方,走线严谨精致,并且每一个产品都经过功能和老化测试,功能完全与原版一致,支持在线升级。

J-Link ARM主要特点:

·IAR EWARM集成开发环境无缝连接的JTAG仿真器。

·支持所有ARM7/ARM9内核的芯片,以及cortexM3,包括Thumb模式。

·支持ADS,IAR,KEIL,WINARM,REALVIEW等几乎所有的开发环境。

·下载速度高达ARM7:600kB/s,ARM9:550kB/s,通过DCC 最高可达800 kB/s*最高JTAG速度12MHz。

·目标板电压范围1.2V-3.3V。

·自动速度识别功能。

·监测所有JTAG信号和目标板电压。

·完全即插即用。

·使用USB电源(可接通J12跳线给目标板供电,出厂时未接通)。

·带USB连接线和20芯JTAG连接排线。

·支持多JTAG器件串行连接。

·标准20芯JTAG仿真插头。

·带J-Link TCP/IP server,允许通过TCP/IP网络使用J-Link

支持的内核:

·ARM7TDMI(Rev 1);

·ARM7TDMI(Rev 3);

·ARM7TDMI-S(Rev 4);

·ARM720T ;

·CORTEXM3。

5.2 现象及结果

给硬件系统供电(5V),插上JLINK,插上串口线(两头都是母的交叉线),插

上MicroSD卡,打开超级终端,配置超级终端为115200 8-N-1,将编译好的程序下载到硬件平台,即可看到超级终端打印出如下信息:

图5-1 测试效果图

SD卡的使用经验总结

由于自己也在使用SD卡,使用的过程中也遇到了一些问题,通过各方的总结,现将其整理一下,调试关键点: 1. 上电时要延时足够长的时间给SD卡一个准备过程,在我的程序里是5秒,根据不同的卡设置不同的延时时间。SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。 2. SD卡发送复位命令CMD0后,要发送版本查询命令CMD8,返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。 3. 理论上要求发送CMD58获得SD卡电压参数,但实际过程中由于事先都知道了SD 卡的工作电压,因此可省略这一步简化程序。协议书上也建议尽量不要用这个命令。 4. SD卡读写超时时间要按照协议说明书书上的给定值(读超时:100ms;写超时:250ms),这个值要在程序中准确计算出来,否则将会出现不能正常读写数据的问题。我自己定义了一个计算公式:超时时间=(8/clk)*arg。 5. 2GB以内的SD卡(标准卡)和2GB以上的SD卡(大容量卡)在地址访问形式上不同,这一点尤其要注意,否则将会出现无法读写数据的问题。如标准卡在读写操作时,对读或写命令令牌当中的地址域符初值0x10,表示对第16个字节以后的地址单元进行操作(前提是此SD卡支持偏移读写操作),而对大容量卡读或写命令令牌当中的地址域符初值0x10时,则表示对第16块进行读写操作,而且大容量卡只支持块读写操作,块大小固定为512字节,对其进行字节操作将会出错。 6. 对某一块要进行写操作时最好先执行擦出命令,这样写入的速度就能大大提高。进行擦除操作时不管是标准卡还是大容量卡都按块操作执行,也就是一次擦除至少512字节。 7. 对标准卡进行字节操作时,起始和终止必须在一个物理扇区内,否则将不能进行读写操作。实际操作过程中建议用块操作以提高效率。不管是标准卡还是大容量卡一个读写命令只能对一个块进行操作,不允许跨物理层地址操作。 8. 在写数据块前要先写入若干个dummy data字节,写完一个块数据时,主机要监测MISO数据线,如果从机处于忙状态这根数据线会保持低电平,这样主机就可以根据这根数据线的状态以决定是否发送下一个命令,在从机没有释放MISO数据线之前,主机绝对不能执行其他命令,否则将会导致写入的数据出错,而且从机也不会响应主机的命令。 9. 在SPI模式下,CRC校验是被忽略的,但依然要求主从机发送CRC码,只是数值可以是任意值,一般主机的CRC码通常设为0x00或0xFF。 读多块操作和写多块操作的传输停止形式不一样,读多块操作时用用命令CMD12终止传输,而写多块操作时用Stop Tran Token(停止传输令牌,值为0xFD)终止传输。

单片机读写SD卡API模式读写

单片机读写SD卡最简单最基本的程序 处理器:s3c44b0 (arm7) SD卡与处理器的引脚连接:MISO -->SIORxD MOSI -->SIOTxD CLK -->SCLK CS -->PE5 四个文件::用户API函数,移植时不需修改 :中间层函数,移植时不需修改 :硬件层函数,移植时需修改 :一些功能的宏定义,移植时需修改 第一次读写SD卡时,需调用SD_Init(void),然后就可以条用Read_Single_Block或者Write_Single_Block进行读写操作 注意:进行写操作时,最好不要写前700个扇区,应为这些扇区都是FAT文件系统的重要扇区,一旦误写则可能会导致SD无法被电脑识别,需格式化。 /******************************************************* 文件名: 作用:用户API函数,包括四个函数, 读取一块扇区(512字节)U8 Read_Single_Block(U32 blk_addr, U8 *rx_buf) 写一个扇区(512字节)U8 Write_Single_Block(U32 blk_addr, U8 *tx_buf) 获取SD卡基本信息,即读CSD寄存器信息(16字节):void SD_info() SD卡初始化:U8 SD_Init(void) ********************************************************/

/******************************************** 功能:读取一个block 输入:blk_addr为第几个block,rx_buf为数据缓存区首地址输出:返回NO_ERR则成功,其它则读取失败 ********************************************/ U8 Read_Single_Block(U32 blk_addr, U8 *rx_buf) { U16 rsp = 1; U8 i = 0; SD_sel(); //使能SD卡 while(rsp && (i < 100)) { write_cmd(CMD17, blk_addr << 9); //写命令CMD17 rsp = Get_rsp(R1); //获取答应 send_clk(); } if(i > 99) //如果命令超时,则执行超时处理 {

基于ARM嵌入式的视频监控系统

毕业设计(论文) 课题名称基于ARM嵌入式远程视频监 控系统 学生姓名蔡明俊 学号 0815022114 专业通信工程 班级 08通信本1班 指导教师张洪涛教授 2012 年 5月

The Remote Video Surveilance Based On ARM Embedded System By Samuel Cai June 2012

毕业设计(论文)任务书 系部电气信息系指导教师张洪涛职称教授 学生姓名蔡明俊专业班级通信工程(一)学号0815022114 论文题目基于ARM嵌入式远程视频监控系统 论文内容目标及进度要求论文要求: 基于Linux平台的ARM系统的实现;通过内核移植与软件移植实现视频信号的采集和压缩,基于TCP/IP技术的视频的网络传输。 论文要求完成远程视频实时监控实例,并描述开发过程。 进度安排: 2012.1.11 布置毕业论文,选定毕业论文题目《基于ARM嵌入式远程 视频监控系统》 2012.1.12-02.28 收集资料, 资料来源主要来自图书馆、校园网电子图书期刊资料,撰写主要参考文献的摘要,翻译外文参考资料。2012.3.1-7 撰写开题报告 2012.2-3月修改开题报告和论文提纲,开题报告定稿 2012.3-4月撰写论文初稿 2012.5.1-9 上交毕业论文初稿,指导老师检查论文初稿,提出修改意见2012.5.10-20 修改论文初稿,完成并上交毕业论文二稿 2012.5.21-30 修改论文二稿,完成并上交毕业论文三稿 2012.5.31 完成论文定稿并打印装订 2012.6.上旬论文答辩 指导教师签名:张洪涛 年月日 系部审核

SD卡-中文学习笔记

SD卡操作 一、概述 1、简介 SD卡是基于flash的存储卡。 SD卡和MMC卡的区别在于初始化过程不同。 SD卡的通信协议包括SD和SPI两类。 SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理。

2、功能介绍 2.1 特点 1)主机无关的FLASH内存擦除和编程 读或写数据,主机只要发送一个带地址的命令,然后等待命令完成,主机无需关心具体操作的完成。当采用新型的FLASH时,主机代码无需更新。 2)缺陷管理 3)错误恢复 4)电源管理 Flash每个扇区有大约10万次的写寿命,读没有限制。 擦除操作可以加速写操作,因为在写之前会进行擦除。 3 SD总线模式 3.1 Negotiating Operation Conditions 当主机定义了SD卡不支持的电压范围时,SD卡将处于非活动状态,将忽略所有的总线传输。要退出非活动状态唯一的方法就是重新上电。 3.2 SD卡获取和识别 SD卡总线采用的是单主多从结构,总线上所有卡共用时钟和电源线。主机依次分别访问每个卡,每个卡的CID寄存器中已预编程了一个唯一的卡标识号,用来区分不同的卡。 主机通过READ_CID命令读取CID寄存器。CID寄存器在SD卡生产过程中的测试和格式化时被编程,主机只能读取该号。 DAT3线上内置的上拉电阻用来侦测卡。在数据传输时电阻断开(使用ACMD42)。

3.3 卡状态 卡状态分别存放在下面两个区域: 卡状态(Card Status),存放在一个32位状态寄存器,在卡响应主机命令时作为数据传送给主机。 SD状态(SD_Status),当主机使用SD_STATUS(ACMD13)命令时,512位以一个数据块的方式发送给主机。SD_STATUS还包括了和BUS_WIDTH、安全相关位和扩展位等的扩展状态位。 3.4 内存组织 数据读写的基本单元是一个字节,可以按要求组织成不同的块。

STM32读写SD卡要点

3.20SD卡实验 很多单片机系统都需要大容量存储设备,以存储数据。目前常用的有U盘,FLASH芯片,SD卡等。他们各有优点,综合比较,最适合单片机系统的莫过于SD卡了,它不仅容量可以做到很大(32Gb以上),而且支持SPI接口,方便移动,有几种体积的尺寸可供选择(标准的SD 卡尺寸,以及TF卡尺寸),能满足不同应用的要求。只需要4个IO口,就可以外扩一个最大达32GB以上的外部存储器,容量选择尺度很大,更换也很方便,而且方便移动,编程也比较简单,是单片机大容量外部存储器的首选。 ALIENTKE MiniSTM3开发板就带有SD卡接口,利用STM32自带的SPI接口,最大通信速度可达18Mbps,每秒可传输数据2M字节以上,对于一般应用足够了。本节将向大家介绍,如何在ALIENTEK MiniSTM32开发板上读取SD卡。本节分为如下几个部分: 3.20.1 SD卡简介 3.20.2 硬件设计 3.20.3 软件设计 3.20.4 下载与测试

3.20.1 SD卡简介 SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性。 SD卡一般支持2种操作模式: 1,SD卡模式; 2,SPI模式; 主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。 SD卡的引脚排序如下图所示: 图3.20.1.1 SD卡引脚排序图 SD卡引脚功能描述如下表所示: 表3.20.1.1 SD卡引脚功能表 SD卡只能使用3.3V的IO电平,所以,MCU一定要能够支持3.3V的IO端口输出。 注意:在SPI模式下,CS/MOSI/MISO/CLK都需要加10~100K左右的上拉电阻。 SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送>74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400Khz!。 ALENTEK MiniSTM32开发板使用的是SPI模式来读写SD卡,下面我们就重点介绍一下SD卡在SPI模式下的相关操作。 首先介绍SPI模式下几个重要的操作命令,如下表所示:

基于ARM的嵌入式数据库研究与实现

基于ARM的嵌入式数据库研究与实现 陆俊,张佳,刘宏 (湖南师范大学 数学与计算机科学学院, 湖南 长沙 410081) email:lu_jun6@https://www.sodocs.net/doc/e113487308.html, 摘 要:ARM与uCLinux是当前非常流行的嵌入式系统组合,SQLite作为嵌入式数据库中的佼佼者,三者的结合,为各自带来了新的发展空间。针对SQLite运用于嵌入式系统所产生的技术问题,提出了较为详实的解决方案。 关键词:嵌入式数据库;ARM;S3C44B0X;uClinux;SQLite;SkyEye 1.引言 32位ARM嵌入式微处理器具有高性能、低功耗的特性,已被广泛应用于消费电子产品、无线通信和网络通信等领域[1]。uClinux是专门为没有内存管理单元MMU的微处理器设计的Linux的衍生嵌入式操作系统,内核较常规Linux小但保留了其绝大多数优点[2]。目前国内外采用ARM-uClinux作为嵌入式系统非常普遍。 SQLite是用C语言编写的开源嵌入式数据库引擎,占用资源非常低,在嵌入式设备中,只需要几百K的内存就够了。它能够支持Windows/Linux等主流操作系统,可与TCL、PHP、Java等程序语言相结合,提供ODBC接口,其处理速度甚至令开源世界著名的数据库管理系统Mysql、PostgreSQL望尘莫及[3]。 本文给出了在一款ARM嵌入式微处理器S3C44BOX上移植uClinux及实现SQLite的具体过程,并简要介绍了硬件模拟平台SkyEye。 2.基于S3C44B0X的uClinux的移植 S3C44B0X是三星公司推出的一款基于ARM7TDMI核的16/32位RISC的嵌入式微处理器,它低功耗、高性能的设计,极其适合于对成本和功耗要求较高的应用场合。 2.1 引导程序BLOB的移植 BootLoader是嵌入式系统软件开发的第一个环节,它紧密地将软硬件衔接在一起,对于一个嵌入式设备后续的软件开发至关重要。BootLoader引导程序 最基本的功能是完成CPU和存储器的硬件初始化(包括CPU的主频、SDRAM、中断、串口等) 和内核启动参数的设置并启动内核等。BLOB(Boot Loader Object)作为一款功能强大、使用方便、可移植性好的开源BootLoader,而成为S3C44B0X开发板上非常适合uClinux的Bootloader。 (1) 在宿主机上搭建交叉编译环境 编译内核与文件系统之前需要建立交叉编译环境。从http:// www. https://www.sodocs.net/doc/e113487308.html,/下载 arm-elf-tools安装在Linux宿主机上的/usr/local/bin 目录下,建立Linux机器上ARM的交叉编译环境。BLOB和uClinux 即在此环境下编译。 (2) 下载适当的BLOB版本并安装 从https://www.sodocs.net/doc/e113487308.html,/tpu/下载blob-mba44b0.tgz。这个blob-mba44b0.tgz是为一个叫mba44b0的开发板移植的BLOB,mba44b0也使用S3C44B0 作为其处理单元,所以这个 1

SD卡读写包括两种模式

SD卡读写包括两种模式:SD模式和SPI模式。其中SD模式又可以分为1bit 和4bit两种传输模式。SD卡缺省使用专有的SD模式。SD卡规范中主要讲了一些命令,响应和CRC效验等等,整个规范的内容还是很多的。 SD卡上电后,卡处于空闲状态,主机发送CMD0复位SD卡,然后通过CMD55和ACMD41判断当前电压是否在卡的工作范围内。在得到了正确的响应后,主机可以继续通过CMD10读取SD卡的CID寄存器,通过CMD16设置数据块长度,通过CMD9读取卡的CSD寄存器。从CSD寄存器中,主机可以获知卡容量,支持的命令集等重要参数。此时,卡以进入了传输状态,主机就可以通过CMD17/18和CMD24/25对卡进行读写。CRC校验是为了防止SD卡的命令,应答,数据传输出现错误。每个命令和应答信号都会产生CRC效验码,每个数据块的传输也会长生CRC效验码。 这段程序是友善之臂推出的mini2440开发板中带的ADS测试源码。整个阅读代码的过程是对这S3C2440的芯片手册和SD卡规范来看的,对于MMC卡没有给出注释,其实和SD卡是大同小异。由于是初次接触ARM,对SD规范的认识也不是很深入,再加上自己水平有限,还不能完全读懂源代码,其中的肯定存在一些错误,欢迎大家一起交流讨论。

#define INT 1 #define DMA 2 int CMD13(void);// Send card status int CMD9(void); unsigned int*Tx_buffer;//128[word]*16[blk]=8192[byte] unsigned int*Rx_buffer;//128[word]*16[blk]=8192[byte] volatile unsigned int rd_cnt;//读数据计数器 volatile unsigned int wt_cnt;//写数据计数器 volatile unsigned int block;//读写块总数 volatile unsigned int TR_end=0; int Wide=0;// 0:1bit, 1:4bit int MMC=0;// 0:SD , 1:MMC int Maker_ID; char Product_Name[7]; int Serial_Num; volatile int RCA; void Test_SDI(void) { U32 save_rGPEUP, save_rGPECON; RCA=0;

基于ARM9的嵌入式Linux网络通信系统设计与实现

基于ARM9的嵌入式Linux网络通信 系统设计与实现

随着计算机技术的发展,嵌入式系统已经成为计算机领域的一个重要组成部分。Internet现已成为社会重要的基础信息设施之一,是信息流通的重要渠道,如何让嵌入式设备连接到Internet上,和其他通信系统进行信息交换是当前嵌入式技术领域研究的热点所在。本文结合实际应用需求,详细研究实现了一种基于S3C2410平台和Linux操作系统的嵌入式网络通信系统。 1.嵌入式网络通信系统总体设计 经过大量的资料收集比较,深入地研究分析并结合现有的实验条件,我们对系统的体系结构、硬件平台和软件系统做出了以下选择: 1)目前嵌入式CPU很多,选择哪款CPU要根据自己产品的实际需要。一般而言,首先应尽量选择系统集成度高、外围电路简洁的CPU;其次,还应综合考察CPU的各项性能指标;最后,还应该考虑软硬件开发环境的建立、厂家的货源以及代理的软件支持力度。经过比较, 本设计采用三星的S3C2410微处理器。这是一款高性价比、低功耗、高集成度的CPU,基于ARM920T内核,主频最高为203MHz,专为手持设备和网络应用而设计,能满足嵌入式系统中的低成本、低功耗、高性能、小体积的要求。 图1为硬件平台的总体设计[ 1 ] 。CPU S3C2410模块是开发板的核心部件。S3C2410 在包含ARM920T核的同时,增加了丰富的外围资源,主要包括1个LCD 控制器,支持STN 和TFT液晶显示屏; 3个通道UART; 4个通道DMA; 4个具有PWM功能的16位定时/计数器和1个16位内部定时器, 支持外部时钟源; 8通道10位ADC,最高速率可达500kB / s;触摸屏、IIS总线、SD 卡和MMC卡接口;117位通用I/O口和24位外部中断源。存储系统包括64MB的NAND Flash存储器模块和SDRAM存储器模块; Flash用于存放嵌入式操作系统、应用程序和用户数据等,并作嵌入式文件系统; SDRAM作为系统运行时的主要区域,用于存放系统及用户数据。通信模块包括串口和以太网接口模块;以太网接口为系统提供以太网接入的物理通道, UART接口则通过RS232可以和宿主机做串口通讯。JTAG调试接口用于系统的嵌入式调试。扩展总线扩展出了系统总线供今后继续开发使用。 图1 硬件平台结构框图

基于ARM的嵌入式TCPip协议的实现

基于ARM的嵌入式TCP/IP协议的实现 该系统可以将数据按网络协议处理,实现数据的以太网传输。其是一套基于嵌入式实时操作系统的嵌入式网络软件开发平台,即在μC/OS—II的平台上,实现ARM微处理器的TCP/IP协议,在此平台之上,可以方便地进行嵌入式应用系统的开发。 0 引言 以太网具有通用性强、技术成熟、带宽迅速增加等特性,工业控制领域出现嵌入式技术,尤其是ARM技术的发展和DSP在工业控制领域的广泛应用,利用嵌入式技术实现以太网通信已经不难见到。嵌入式实时操作系统接入网络后将使远程监测、远程控制、远程诊断和远程维护变得越来越容易。从根本上讲,嵌入式设备接入网络,当前基本采用基于TCP/IP的通信协议。该方案以LPC2210为核心元件研究基于ARM的嵌入式TCP/IP协议的实现的硬件电路,同时在μC/OS一Ⅱ平台上编写应用软件程序。下面对系统做详实的阐述,并重点介绍嵌入式实时操作系统μC/OS—II应用于TCP/IP时应进行合理的裁减。 1 系统硬件设计 基于ARM的嵌入式TCP/IP网络通信系统主要包括ARM芯片和以太网控制器等芯片组成的以太网接口、驱动软件和嵌入式TCP/IP 协议栈。硬件原理图如图1所示。

该方案设计相对简单,硬件电路中采用的LPC2210是Philips 公司推出的微处理器,带有16 KBRAM,76个通用I/O口,12个独立外部中断引脚,集成有8通道的10位A/D,能够基于芯片设计复杂的系统。虽然LPC2210具有较快的访问速度,但片内没有集成FLASH,所以这里扩展1片16 Mb FLASH SST39VFl60来保存用户程序。其架构满足μC/OS—II正常运行的基本要求。 RTL8019AS是台湾Realtek半导体公司生产的以太网控制器,其性能包括:支持EthernetII和IEEE802.3标准;支持8/16位数据总线;内置16 KWord的SRAM;全双工,收发同时达到10 Mb/s;支持BNC,AUI,UTP介质。RTLS019AS可提供100脚的TQFP封装,减少了PCB面积,更适合于嵌入式系统。HR901170A是汉仁电子有限公司生产的RJ45接口连接器(带网络变压器/滤波器),该连接器满足IEEES02.3和IEEE902.3ab标准,能够较好地抑制电磁干扰。通过HR901170A系统就可以连接到以太网上。

sd卡电路图学习

,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先来讲解SD卡的读写时序。 (1)SD卡的引脚定义: SD卡引脚功能详述:

SD卡SPI模式下与单片机的连接图: SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。这里只对其SPI方式进行介绍。 (2) SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI 控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。 1)命令与数据传输 1. 命令传输 SD卡自身有完备的命令系统,以实现各项操作。命令格式如下: 命令的传输过程采用发送应答机制,过程如下: 每一个命令都有自己命令应答格式。在SPI模式中定义了三种应答格式,如下表所示:

SD卡初始化及读写流程

SD卡初始化及读写流程 默认分类2010-03-03 21:03:00 阅读264 评论0 字号:大中小 SD卡调试关键点: 1. 上电时要延时足够长的时间给SD卡一个准备过程,在我的程 序里是5秒,根据不同的卡设置不同的延时时间。SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。 2. SD卡发送复位命令CMD0后,要发送版本查询命令CMD8, 返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。 3. 理论上要求发送CMD58获得SD卡电压参数,但实际过程中 由于事先都知道了SD卡的工作电压,因此可省略这一步简化程序。协议书上也建议尽量不要用这个命令。 4. SD卡读写超时时间要按照协议说明书书上的给定值(读超时: 100ms;写超时:250ms),这个值要在程序中准确计算出来,否

则将会出现不能正常读写数据的问题。我自己定义了一个计算公 式:超时时间=(8/clk)*arg。 5. 2GB以内的SD卡(标准卡)和2GB以上的SD卡(大容量卡)在 地址访问形式上不同,这一点尤其要注意,否则将会出现无法读写数据的问题。如标准卡在读写操作时,对读或写命令令牌当中的地址域符初值0x10,表示对第16个字节以后的地址单元进行操作(前提是此SD卡支持偏移读写操作),而对大容量卡读或写命令令牌当中的地址域符初值0x10时,则表示对第16块进行读写操作,而且大容量卡只支持块读写操作,块大小固定为512字节, 对其进行字节操作将会出错。 6. 对某一块要进行写操作时最好先执行擦出命令,这样写入的速 度就能大大提高。进行擦除操作时不管是标准卡还是大容量卡都按块操作执行,也就是一次擦除至少512字节。 7. 对标准卡进行字节操作时,起始和终止必须在一个物理扇区 内,否则将不能进行读写操作。实际操作过程中建议用块操作以提高效率。不管是标准卡还是大容量卡一个读写命令只能对一个块进行操作,不允许跨物理层地址操作。

基于ARM的嵌入式Web服务器设计

题目:基于ARM的嵌入式Web服务器设计与实现 学号:1308010139 姓名:吴明川 班级:1308010139 专业:计算机科学与技术 课程老师:孔军 二零一六年五月

摘要 随着计算机、网络通信和Internet 技术的飞速发展和不断进步,嵌入式系统在家庭和工业应用越来越广泛。如何将嵌入式系统和工业控制系统接入Internet,综合利用嵌入式系统资源,实现嵌入式系统的远程管理和控制,已成为倍受关注的研究课题,而实现嵌入式系统的网络化则成为嵌入式系统的发展趋势。 网络通信时,应用程序使用C/S(客户/服务器)模式进行信息交互。传统的服务器程序一般运行在大型的拥有高级操作系统的服务器的计算机上,这样服务器软件需要强大的硬件和系统软件支持。嵌入式网络服务器是利用嵌入式系统实现服务器的软件和硬件功能,是嵌入式技术和网络技术相结合的产物。与传统服务器相比,嵌入式Web服务器具有结构简单、体积小、可靠性强以及方便灵活等特点。这些让它具有很大的发展潜力。另一方面,嵌入式Web服务器与传统的web服务器相比,也受到一些限制。传统的Web服务器主要用于处理较大的客户量的同时并发访问,硬件方面有强大的处理器和内存支持,软件方面有商业数据库支持,而嵌入式Web服务器的处理能力和存储容量都有限,这就要求嵌入式Web服务器在设计过程中需要尽量合理利用资源。 将嵌入式技术与Web 技术相结合,已成为目前嵌入式系统的一个重要发展方向和必然趋势。利用源代码开放的uClinux 为操作系统平台,实现了以ARM 微处理器为核心的嵌入式Web 服务器,在分析了嵌入式Web 服务器的体系结构后,给出了系统的硬件结构组成和软件设计。对Web 服务器的测试结果表明,该服务器运行稳定、控制方便,将在智能家居、远程数据采集、工业控制等领域有着广泛的应用前景。 关键词:网络通信;嵌入式系统;ARM处理器;uClinux;Boa服务器;

SD卡读写操作 SD卡电路

SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先来讲解SD卡的读写时序。 (1)SD卡的引脚定义: SD卡引脚功能详述:

SD卡SPI模式下与单片机的连接图: SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。而SPI 方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。这里只对其SPI方式进行介绍。 (2) SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。 1)命令与数据传输 1. 命令传输 SD卡自身有完备的命令系统,以实现各项操作。命令格式如下: 命令的传输过程采用发送应答机制,过程如下: 每一个命令都有自己命令应答格式。在SPI模式中定义了三种应答格式,如下表所示:

sd卡读写程序(SDcardreadandwriteprogram)

sd 卡读写程序( SD card read and write program ) SD card read and write program Objective: To study the SD card / / operation Design / software 1, using SPI communication / / SD card 2, go to SD / / in order to 0-255 a total of 256 data, and then read back LCD1602 display / / hardware requirements: S11 ON / / dial switch Jumper J18 / / all connected #include //dsPIC30F6014 standard header file _FOSC( CSW_FSCM_O&F FX T_PLL4); //4 doubler crystal oscillator, Failsafe clock closed _FWDT (WDT_OFF); / / close the watchdog timer _FBORPO(RP BOR_OFF& MCLR_EN);/ / reset prohibited MCLRr eset enable. _FGS (CODE_PROT_OFF); / / code protection against #define CS PORTGbits.RG9 / / SD card selection pin definition #define RSL https://www.sodocs.net/doc/e113487308.html,TB4 / / definition LCDc ontrol bits (note here can only register with LATB, you cannot directly use the

嵌入式Modbus-TCP网关的设计与实现

嵌入式Modbus/TCP网关的设计与实现 摘要:设计并实现了一种基于嵌入式系统的Modbus/TCP协议转换网关,允许用户通过以太网对Modbus现场总线设备进行监控,实现了以太网与现场总线的互联。测试结果表明该网关工作稳定可靠。对工业以太网与现场总线互联的深入应用具有较高的参考价值和实际意义。关键词: Modbus/TCP; 现场总线; 网关 随着企业信息化进程的深入发展,实现企业上层的管理网络与现场控制网络的无缝连接显得越来越重要。基于质量分析的生产管理、与安全相关的测试监控都要求现场的仪器仪表能对现场的信息进行处理并能及时被上级监控和管理网络访问与控制,最终纳入到企业信息管理系统统一的框架中。目前,构成底层控制网络的现场总线技术已获得了广泛的应用。多种现场总线标准并存而相互间无法兼容的问题一直困扰着工业界。将工业以太网应用到现场控制网络已成为当前研究的热点和未来发展的趋势。如何使这种网络结构与工业以太网技术相结合,实现底层生产与上层管理的紧密集成是当前研究的热点。1 Modbus协议及网关拓扑结构 Modbus现场总线协议是Modicon公司于1978年提出的一种现场总线协议[1]。通过此协议,控制器相互之间、控制器经由网络和其他设备之间可以进行通信。该协议内容可以免费获得,因此Modbus的串行链路版本在市场上长期占有主导地位。大量的产品已直接运行或兼容Modbus串行链路版本。 Modbus/TCP工业以太网协议是1999年被开发的Modbus 协议的另一版本[2],允许用户通过以太网访问设备。协议的开放性及简单易学,使它比很多受商业利益驱使的协议取得更快的发展,受到众多第三方产品厂商、终端用户、系统集成商的广泛支持[3]。本文设计和实现了一种嵌入式协议转换网关,通过Modbus/TCP协议将传统的串行链路通信的Modbus现场总线与以太网相连。用户经由以太网对Modbus设备进行数据采集并对Modbus设备进行远程访问和控制。同时网关还提供Web服务功能,允许通过Web 浏览器直接配置网关的IP地址等信息并保存到网关的非易失性存储器中。图1是嵌入式Modbus/TCP网关的连接示意图。 2 网关总体设计网关选用了ATMEL公司生产的AT91RM9200高性能32位工业级嵌入式微处理器作为网关硬件系统的核心。网关的软件系统将移植μC/OS-II嵌入式实时操作系统和实现TCP/IP协议栈,并在此基础上设计应用层程序。网关的总体设计结构如图2。网关的设计方案将采用开放源代码的嵌入式操作系统和TCP/IP协议栈,因此在取得较高性价比的基础上可取得最佳的扩展性。 3 硬件设计 AT91RM9200是著名半导体厂商ATMEL力推的一款基于ARM920T内核的工业级嵌入式微处理器,为最大功能、最低功耗、最低成本的嵌入式系统提供了一个完整的解决方案[4],它除具备ARM微处理器传统优势以外,其性能、可靠性和扩展性都大大超过普通的商业级ARM7核心的嵌入式微处理器。硬件系统的结构如图3。 4 软件系统设计嵌入式实时操作系统在目前的嵌入式应用中使用越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要[5]。网关采用了μC/OS-II实时操作系统。μC/OS-II实时操作系统是专门为嵌入式应用设计的,除了与CPU硬件相关部分是用汇编语言编写外,其他绝大部分代码用C语言编写。μC/OS-II具有执行效率高、占用空间小、实时性能优良、可靠性高、可扩展性强和移植性好等特点[6]。选择合适的ARM处理器的开发工具可以加快嵌入式系统的开发进度、节约成本、提高效率。CodeWarrior for ARM Developer Suite V1.2集成开发环境是ARM公司推出的新一代ARM集成开发工具,网关的所有程序代码均在此集成开发环境中编译、链接、调试。4.1 μC/OS-II初始化程序设计μC/OS-II操作系统运行前需要对硬件系统的片内和片外存储器、系统堆栈等进行初始化。这些工作与硬件系统相关,难以用C语言实现,需要用汇编语言实现。系统在执行完初始化

嵌入式 基于ARM9的以太网接口设计

基于ARM9的以太网接口设计 1课题研究背景 嵌入式系统是以应用为中心和以计算机为基础的,并且软硬件是可裁剪的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。随着微电子技术和计算机技术的发展,嵌入式技术得到广阔的发展,已成为现代工业控制、通信类和消费类产品发展的方向。 以太网最典型的应用时以太网和TCP/IP,即灵活的以太网底层加上已经成为通用标准的网路传输协议TCP/IP,使得以太网能够非常容易地集成到以Internet和Web技术为代表的信息中。以太网在实时操作、可靠传输、标准统一等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已经被国内外很多监控、控制领域的研究人员广泛关注,并在实际应用中展露出显著的优势。 随着嵌入式系统和网路技术的兴起已经飞速发展,使系统的通信有了更好的传输方式——系统通过连接以太网,借助以太网网路通信,成为一个切实可行的办法。 2 网络基础知识 计算机网络概述 计算机网路是由多种计算机和终端设备通过通信线路连接起来的复合系统。并建立了OSI参考模型。如图1所示:

图1 OSI参考模型 OSI模型中的前2层作为软硬件来实现的,后5层则作为软件来实现的。参考模型中低层主要用于处理数据的传输,高层则负责连接的建立和数据的表示。 以太网技术概述 以太网是指数字设备公司、英特尔公司和Xerox公司联合在1982年公布的一个标准,具有传输速率高、网路软件丰富、系统功能强、安装连接简单等很多优点。以太网遵守IEEE802.3网络标准。以太网系统有硬件和软件两部分组成,二者共同实现以太网系统各计算机之间传输信息和共享信息。以太网系统具有介质访问控制协议、接口部件、物理介质、帧传输四个基本要素。 3、嵌入式系统基础知识 嵌入式系统技术的发展、特点及发展趋势 20世纪70年代,以微处理器为核心的微型计算机以其小型、价廉。高可靠性特点,迅速进入市场,基于高速数值计算能力的微型机,表现出的智能化水平引起了各个领域的专业人士的兴趣。为了区别原有的通用计算机系统,把嵌入到对象体系中,实现对象体系智能化控制的计算机,称为嵌入式计算机系统。嵌入性、专用性与计算机系统是嵌入式的三个基本要素。 本文介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AE成功实现了嵌入式系统网

SD卡引脚及spi模式基本操作过程

SD卡引脚及spi模式基本操作过程 (摘自网络) 对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先来讲解SD卡的读写时序。 SD卡的引脚定义 SD卡引脚功能详述: 引脚编号 SD模式SPI模式 名称类型描述名称类型描述 1 CD/DAT3 IO或PP 卡检测/ 数据线3 #CS I 片选 2 CMD PP 命令/ 回应 DI I 数据输入 3 VSS1 S 电源地VSS S 电源地 4 VDD S 电源VDD S 电源 5 CLK I 时钟SCLK I 时钟 6 VSS2 S 电源地VSS2 S 电源地 7 DAT0 IO或PP 数据线0 DO O或PP 数据输出 8 DAT1 IO或PP 数据线1 RSV 9 DAT2 IO或PP 数据线2 RSV 注:S:电源供给I:输入O:采用推拉驱动的输出 PP:采用推拉驱动的输入输出 SD卡SPI模式下与单片机的连接图:

SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI 方式。这里只对其SPI方式进行介绍。 SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。 1)命令与数据传输 1. 命令传输 SD卡自身有完备的命令系统,以实现各项操作。命令格式如下: 命令的传输过程采用发送应答机制,过程如下:

单片机读写SD卡教程

郑重声明:本实验并不是对所有SD卡都能成功运行第一步:打开winhex软件,用读卡器读SD卡,在winhex中查看SD卡

点击查找(ctrl+F) 输入FAT(找到DBR处)

发现DBR起始于0x11200扇区地址,它必是512整数倍,因为一个扇区含512BYTE,所以在程序中读一个扇区时一定要是512整数倍,否则会出错。11200地址对应的值是0xEB,本程序读一下这个地址的值看看是否正确。注意有的winhex编址是十进制 看看程序吧 #include #define uchar unsigned char #define uint unsigned int //============================================================= //定义SD卡需要的4根信号线 sbit SD_CLK = P1^1; sbit SD_DI = P1^2; sbit SD_DO = P1^0; sbit SD_CS = P1^3; sbit Beep=P2^0;//用来调程序标志 //=========================================================== //=========================================================== //定义512字节缓冲区,,89C52直接定义成unsigned char DATA[80];,太大了RAM不够unsigned char xdata DATA[512]; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--); for(y=110;y>0;y--); }

相关主题