SD卡指令集
- 格式:doc
- 大小:23.00 KB
- 文档页数:2
详细命令描述表1 基本命令(类0和类1)命令索引类型参数响应缩写描述CMD0 bc [31:0]无用—GO_IDLE_STATE 重置所有卡到Idle状态CMD1 保留CMD2 bcr [31:0]无用R2 ALL_SEND_CID 要求所有卡发送CID号CMD3 Bcr [31:0]无用R6SEND_RELATIVE_ADDR 要求所有卡发布一个新的相对地址RCACMD4 不支持CMD5 保留CMD6 保留CMD7 ac[31:16]RCA[15:0]无用R1 选中/不选中卡CMD8 R7 发送接口状态命令CMD9 ac[31:16] RCA[15:0]无用R2 SEND_CSD寻址卡并让其发送卡定义数据CSDCMD10 ac[31:16] RCA[15:0]无用R2 SEND_CID寻址卡并让其发送卡识别号CIDCMD11 adtc[31:0]数据地址R1READ_DA T_UNTIL_STOP从卡读取数据流,从给定地址开始,知道停止传输命令结束CMD12 ac [31:0]无用R1b STOP 中止多个块的读/写操作CMD13 ac[31:16] RCA[15:0]无用R1 SEND_STA TUS寻址卡并发送卡状态寄存器CMD14 保留CMD15 ac[31:16] RCA[15:0]无用_ GO_INACTIVE_STATE设置卡到inactive状态表2 块读操作命令(类2)命令索引类型参数响应缩写描述CMD16 ac[31:0]块长度R1 SET_BLOCKLEN为接下来的块操作指令设置块长度CMD17 adtc[31:0]数据地址R1 READ_SINGLE_BLOCK 读取一个块CMD18 adtc[31:0]数据地址R1 READ_MULTIPLE_BLOCK连续读取多个块,直到停止命令CMD19-23 保留表3 块写操作命令(类4)表4 写保护(类6)命令索引类型参数响应缩写描述CMD28 ac[31:0]数据地址R1b SET_WRITE_PROT设置地址组保护位。
Micro SD 卡(TF卡)spi 模式实现方法现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见。
自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查了以后发现SD卡和Micro SD卡其实也就大小和引脚不一样,它们的操作其实是一样的,所以网上的SD卡读写代码其实可以直接拿来用。
关于SD卡和Micro SD卡的引脚定义和不同可见下两表:我们可以发现Micro SD卡只有8个引脚是因为比SD卡少了一个Vss。
当然你也可以买个卡套套在Micro SD卡上,这样一来大小就和SD卡一样大,这时候卡套上的9个引脚就和SD卡一样了,你可以完全当做SD卡来操作。
spi下电路的连接非常简单,接上电源线Vdd和地线Vss,再接上spi的CS,SCLK,DI(MOSI)和DO(MISO)就可以了,其他引脚可以放空。
注意SD卡的电源和操作电压都为2.7-3.6V,5V的单片机要进行电平转换或串电阻限流。
还有记得SD卡的CS,SCLKh和DI要用10~100K的电阻上拉。
我是套了卡套接的电路,因为Micro SD卡的引脚太密了,不好焊接,SD卡相对引脚好焊。
因为没有卡座,而且也没专门的PCB我就直接焊到卡套上,诶牺牲了一个卡套。
下面是我自己画的电路图:上面Micro SD卡的硬件电路就好了,下面我们讲讲Micro SD卡的软件驱动和指令集。
SD卡的命令格式如下,6字节共48位,传输时最高位(MSB)先传输:SD卡的command(命令)占6 bit,一般叫CMDx或ACMDx,比如CMD1就是1,CMD13就是13,ACMD41就是41,依此类推。
Command Argument(命令参数)占4 byte,并不是所有命令都有参数,没有参数的话该位一般就用置0。
最后一个字节由7 bit CRC校验位和1 bit停止位组成。
NOTE:1) class1,class3,class9:SPI模式不支持!2) 继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。
SD1.1中卡容量存放于CSD 寄存器中,而由于其规范中相关域的值较小,固最大只能表示2G地址。
随着Nand容量的大大提高,SD1.1已经不适合潮流,因而推出了SD2.0。
初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。
SD1.1不支持CMD8,而SD2.0的CMD8能读到卡的接口信息。
如果卡响应CMD8为无效命令,则走SD1.1的流程,可能是SD1.1或MMC。
如CMD8响应正确,则很可能是SD2.0了。
3) SD卡具有安全加密功能,内置128bit加密位,在加密状态下,用户需提供密码才可以访问卡内的数据。
在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。
密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。
Byte Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit00 Erase Card Lock/UnLock ClrPwd SetPwd1 Psw_Length2 Pwd Data...PwdLen+1擦除:此位置1时,卡的密码和内容会被强制擦除,在遗忘密码时可使用此功能。
锁定/解锁:此位置1时,表示命令结束后状态为锁定,为0,表示卡解锁。
清除密码:此位置1,表示清除卡的旧密码,此时数据中必须包含旧密码的正确内容。
加密:此位置1,表示设置卡的新密码,数据中必须包含新密码内容;更改密码时,新密码紧跟随旧密码内容。
在任意刻,主机可以通过CMD13命令读取卡的内部状态,判断其锁定状态。
bit0置1表示卡处于锁定状态。
1、设置密码使用CMD16设置Block长度为密码长度为PWD_LEN+2;发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;使用CMD16恢复原Block长度。
目录一.硬件连接 (1)1.屏命名规则 (1)2.C系列屏 (1)2.1. 实物图如下图1(具体型号请参考对应数据手册)所示: (1)2.2. 串口引脚接法说明: (2)2.3.用户接口方式 (2)3.T系列屏 (2)3.1 .实物图如下图2(具体型号请参考对应数据手册)所示: (2)3.2 .10pin串口引脚接法说明: (3)3.3. 8pin串口引脚接法说明: (3)3.4. 用户接口方式 (3)4.S系列屏 (4)4.1. 实物图如下图3(具体型号请参考对应数据手册)所示: (4)4.2. 10pin串口引脚接法说明: (4)4.3. 8pin串口引脚接法说明: (4)4.4. 用户接口方式 (5)5.18系列屏 (5)5.1. 实物图如下图4(具体型号请参考对应数据手册)所示: (5)5.2. 6pin串口引脚接法说明: (6)5.3. 用户连接端子 (6)二.软件设计 (6)1.开发原理 (6)2.开发前准备资料 (7)2.1 软件 (7)2.1.1 配置软件 (7)2.1.2 0号字库软件 (9)2.1.3 汉字字库生成软件 (10)2.1.4 迪文ICO生成图标库软件 (11)2.1.5 迪文图片分辨率转换软件 (14)2.2 硬件 (16)2.2.1 连接线 (16)2.2.2 下载工具 (17)3.软件开发步骤 (18)3.1. 软件界面介绍 (18)3.2. 通讯说明 (18)3.2.1 数据帧架构 (18)3.2.2 指令集及说明 (19)3.2.3 0x80、0x81指令说明 (19)3.2.4 0x82、0x83指令说明 (20)3.3. 例程说明 (20)3.3.1. 屏按键功能(与上位机交互) (21)3.3.2. 屏显示/不显示变量功能(启动描述指针功能) (21)3.3.3. 数据存储功能(掉电保存) (23)3.3.4. 上电初始化 (24)3.3.5. 不带触摸的屏实现触摸屏功能 (25)4.SD卡升级内核程序 (27)4.1. SD卡升级内核应满足以下任一条件: (27)4.2. SD卡升级注意事项 (27)三.注意事项 (27)一.硬件连接1.屏命名规则图12.2. 串口引脚接法说明:图23.2 .10pin串口引脚接法说明:4.S系列屏4.1. 实物图如下图3(具体型号请参考对应数据手册)所示:图3后的短接焊盘来改变电平为3.3V的COMS电平;供电可以通过焊接屏后的短接焊盘来改变供电范围,具体参数请参考对应型号数据手册;4.3. 8pin串口引脚接法说明:4.4. 用户接口方式10 Pin_1.0mm FCC , 8 Pin_2.54mm5.18系列屏5.1. 实物图如下图4(具体型号请参考对应数据手册)所示:图45.2. 6pin 串口引脚接法说明:引脚名称 说明 GND 接地485_- 接485接口的B 端 485_+ 接485接口的A 端232_Tx 屏发送端,接控制端的接收端 232_Rx 屏接收端,接控制端的发送端VIN 典型12V 供电,宽压供电,具体型号屏请以对应数据手册为准SD 卡座SD 卡下载接口,凤凰端子边上5.3. 用户连接端子6Pin_3.81mm 凤凰端子;二.软件设计1.开发原理开发原理概述:使用迪文DGUS 配置软件将变量和需要实现的功能关联起来,然后通过控制端给该设置的变量赋值来实现对应的功能,或读取变量值来查看屏当前相关功能的状态; 变量地址:是针对屏来进行定义的,类似组态软件的地址定义,又不相同,主要区别在于组态软件的地址是有特定含义的(即和屏内部的某个功能已绑定),而采用DGUS 屏的变量地址可以与任意功能来进行关联(不出现变量地址交叉的情况即可),变量地址范围为0x0000——0x6FFF ;变量地址 屏显示、触控功能 单片机 绑定 对变量读写 配置软件设置设置配置时定义变量地址2.开发前准备资料2.1 软件2.1.1 配置软件配置软件的主要目的是配置屏的触控、通讯参数设置及显示参数设定;配置软件如下图5所示:图5软件使用操作步骤:1.新建一个工程文件,如下图6所示选择屏的分辨率及存储位置;分辨率举例说明:屏型号:DM T80480T070_06WTT:16位色;80480 :800 x 480的分辨率;注:由于所有K600+的屏都是16位色,软件已屏蔽位色选择功能,若屏需要竖起来显示(及该为480 x 800的方式),可以修改软件目录下Config文件夹上的Terminal文件来修改分辨率,修改为480 x 800 ,如下截图7所示(设置R10=480X800):图6图72.注:若图片不是按照存储位置方式命名,添加进来图片后,软件左边“位置”一列,对应的是设置触控及显示的位置,如将上图位置修改为1,再做设置,那么0界面(即首页)的触控及显示设置都将到次页(即1界面)上。
sd卡读写模块的用法
SD卡读写模块是一种用于读写SD卡存储设备的模块。
它通常通过SPI或SDIO接口与主控制器(如单片机、开发板等)连接,并提供读
取和写入SD卡的功能。
使用SD卡读写模块的步骤如下:
1.初始化:通过控制模块的引脚,配置SPI或SDIO接口的工作模
式和相关参数。
2.卡插入检测:通过检测SD卡插槽的接触状态,确定是否插入了SD卡。
3.卡初始化:对SD卡进行初始化操作,包括发送命令和接收响应,以确认SD卡的类型和性能等信息。
4.数据读取:发送读取命令和地址,接收SD卡返回的数据。
5.数据写入:发送写入命令和地址,将数据写入SD卡的指定块位置。
在使用SD卡读写模块时,我们还可以拓展以下几个方面:
1.多线程读写:通过同时使用多个SPI或SDIO接口,实现多个线程同时读写SD卡,提高数据传输速度。
2. SD卡文件系统:在SD卡中创建文件系统(如FAT32),将数据按照文件的形式进行存储和管理,提供更加灵活和高效的数据存储方式。
3.数据加密:将敏感的数据进行加密后再写入SD卡,防止数据泄露和篡改。
4.文件压缩:在将数据写入SD卡之前,使用压缩算法(如ZIP)对数据进行压缩,减小存储空间占用。
5.数据校验:在读取或写入数据时,进行校验(如CRC校验)以确保数据的完整性和准确性。
总之,SD卡读写模块的使用方式可以根据具体需求进行拓展,以实现更多功能和提升性能。
sd卡读写最小单元
SD卡是一种连续存储介质,由许多小的区块组成,每个区块都可以存储一定数量的数据。
SD卡的读写是以“数据块”为单位进行传输的,其中最小的读写单位就是“块”(Block)。
通常情况下,块的长度是字节的整数倍,一般为512字节,有的SD卡的数据块为1024或2048等等。
这意味着如果要修改SD卡中的数据,通常需要以整个数据块为单位进行读写,而不能只修改一个字节的数据。
这种特性使得SD卡的读写操作相对较为低效,尤其是在需要频繁修改少量数据的情况下。
因此,“sd卡读写最小单元”指的是SD卡中数据的最小读写单位,即数据块(Block)。
内存卡SD卡CMD命令SD卡CMD命令介绍1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))1条时钟线,时钟源是来自APH总线时钟4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用).SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块.2410_SDI控制器:封装了命令和数据的移位操作,支持SDI_1.0规范.有FIFO和DMA 模式.当操作某些寄存器时,控制器会自动帮我们转换成48位的命令包通过移位控制器发给SD从机.SD命令包格式----------------------------------------------------------------------------Bit 位置47 46 [45:40] [39:08] [07:01] 00Bit 宽度 1 1 6 32 7 1值 0 1 x x x 1说明Start Bit Transmission Bit Command Index Argument CRC7 End Bit----------------------------------------------------------------------------在S3C2410中要发送CMD需要设置SDICARG,SDICCON两个寄存器.SDICARG: SDI 命令参数寄存器:SDICCON: SDI 命令控制寄存器:这两个寄存器合起来构成SD协议规范中的CMD命令.其中:SDICARG[31:0] ===================== CMD[39:8] 命令的参数(根据命令所需的参数位格式设置)SDICCON[7:0] ===================== CMD[47:40] 包含Start Bit,Transmission Bit,Command Index.ACMD命令:ACMD是特殊命令.虽然发送方法也是用SDICARG和SDICCON 来发.但是,在发送特殊命令前,要先发送一条普通的不带参数的CMD55命令,表示下一条所发送的命令是特殊命令.例如:CMD52 SDICARG:----------------------------------------------------------------------------Bit 位置 31 [30:28] 27 26 [25:9] 8 [7:0]Bit 宽度 1 3 1 1 17 1 8说明R/W flag Function Number RAW flag Stuff Register Address Stuff Write Data or Stuff Bits----------------------------------------------------------------------------SCR 该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD 卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的.CSD 该寄存器保存着SD卡的详细信息,如块大小,SD卡的容量大小,文件系统等信息.RCA SD的相对地址(SD卡已经保存在芯片内部)OCR 该寄存器保存着SD的可供电范围,并且区别是否为HC卡(根据返回的ORC回应第30位是否置1).CIA (Card I/O Area)CID SD卡的唯一ID号CIS (Card Information Structure)跟Linux内核的参数TagList的存放方式很相似,都是以标识号和长度加后续内容表示一个节点.SD模式的命令说明:01000000 CMD0 GO_IDLE_STATE Mandatory Mandatory Used to change from SD to SPI mode /* 使SD卡进入Idle状态 */ 01000010 CMD2 ALL_SEND_CID Mandatory CID not supported by SDIO /* 广播获取卡的CID信息 */01000011 CMD3 SEND_RELATIVE_ADDR Mandatory Mandatory /* 广播获取SD卡所分配的相对地址 */01000100 CMD4 SET_DSR Optional DSR not supported by SDIO01000101 CMD5 IO_SEND_OP_COND Mandatory01000110 CMD6 SWITCH_FUNC Mandatory1 Mandatory1 Added in Part 1 v1.1001000111 CMD7 SELECT/DESELECT_CARD Mandatory Mandatory /* 根据获取指定的RCA,选中SD卡,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中,如果发送地址0,则表示取消选中全部卡 */01001001 CMD9 SEND_CSD Mandatory CSD not supported by SDIO /* 获取SD相关的存储信息,如块大小,容量等. */ 01001010 CMD10 SEND_CID Mandatory CID not supported by SDIO 01001100 CMD12 STOP_TRANSMISSION Mandatory /* 停止多块传输操作 */01001101 CMD13 SEND_STATUS Mandatory Card Status includes only SDMEM information /* 获取卡的状态 */ 01001111 CMD15 GO_INACTIVE_STATE Mandatory Mandatory01010000 CMD16 SET_BLOCKLEN Mandatory /* 设置SD卡的块大小,CSD寄存器有描述. */01010001 CMD17 READ_SINGLE_BLOCK Mandatory /* 使SD 卡进入传输状态,读取单个块 */01010010 CMD18 READ_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取多个块,直到收到CMD12为止 */ 01011000 CMD24 WRITE_BLOCK Mandatory /* 使SD卡进入传输状态,写入单个块 */01011001 CMD25 WRITE_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,写入多个块 */01011011 CMD27 PROGRAM_CSD Mandatory CSD not supported by SDIO01011100 CMD28 SET_WRITE_PROT Optional01011101 CMD29 CLR_WRITE_PROT Optional01011110 CMD30 SEND_WRITE_PROT Optional01100000 CMD32 ERASE_WR_BLK_START Mandatory01100001 CMD33 ERASE_WR_BLK_END Mandatory01100110 CMD38 ERASE Mandatory01101010 CMD42 LOCK_UNLOCK Optional01110100 CMD52 IO_RW_DIRECT Mandatory01110101 CMD53 IO_RW_EXTENDED Mandatory Block mode is optional01110111 CMD55 APP_CMD Mandatory /* 特殊指令前命令,在发送ACMD类指令前,需要发送此命令 */01111000 CMD56 GEN_CMD MandatoryACMD6 SET_BUS_WIDTH Mandatory /* 设置SD卡的总线位宽,这个需要读取SCR确定 */ACMD13 SD_STATUS MandatoryACMD22 SEND_NUM_WR_BLOCKS MandatoryACMD23 SET_WR_BLK_ERASE_COUNT MandatoryACMD41 SD_APP_OP_COND Mandatory /* 获取SD电压值 */ ACMD42 SET_CLR_CARD_DETECT MandatoryACMD51 SEND_SCR Mandatory SCR not supported by SDIO /* 获取SD卡的SCR寄存器的值 */2410 SDI控制寄存器:SDICON 0x5A000000 R/W SDI control register /* 完成SD卡基础配置,包括大小端,中断允许,时钟使能和重启FIFO */SDIPRE 0x5A000004 R/W SDI baud rate prescaler register /* 对SD的时钟分频系数设置 */SDICARG 0x5A000008 R/W SDI command argument register /* 指令的参数存放在这里,不同的命令,参数的位数格式有不用含义 */ SDICCON 0x5A00000C R/W SDI command control register /* 控制指令形式的寄存器,配置SPI还是SDI指令,指令的反馈长度,是否等待反馈,是否运行指令,指令的索引等 */SDICSTA 0x5A000010 R/(W) SDI command status register /* 指令状态寄存器,指令是否超时,传送,结束,CRC是否正确等 */ SDIRSP0 0x5A000014 R SDI response register 0 /* SD回应状态寄存器,R1的回应都用这个,其他长回应会用到4个. */SDIRSP1 0x5A000018 R SDI response register 1SDIRSP2 0x5A00001C R SDI response register 2SDIRSP3 0x5A000020 R SDI response register 3SDIDTIMER 0x5A000024 R/W SDI data / busy timer register /* 设置超时时间 */SDIBSIZE 0x5A000028 R/W SDI block size register /* 设置Block的大小,FIFO共填充的数据.单位是字节*/ SDIDCON 0x5A00002C R/W SDI data control register /* 数据控制寄存器,配置是几线传输,数据发送方向,数据传送方式,要传送多少个块的数据等 */ SDIDCNT 0x5A000030 R SDI data remain counter register /* 数据保持计数器 */SDIDSTA 0x5A000034 R/(W) SDI data status register /* 数据状态寄存器,数据是否发送完,CRC效验,超时等*/ SDIFSTA 0x5A000038 R SDI FIFO status register /* FIFO状态寄存器,DMA 传输时不用判断FIFO */ SDIDAT 0x5A00003C (Li/W,Li/B, Bi/W) 0x5A00003F(Bi/B) R/W SDI data register /* 数据传输寄存器,要严格读完所请求的数据块,否则遗留的数据位将影响下一次的数据传输 */SDIIMSK 0x5A000040 R/W SDI interrupt mask register /* 中断屏蔽 */SD/MMC 初始化流程步骤是:1)配置时钟,慢速一般为400K,设置工作模式2)发送CMD0,进入空闲态,该指令没有反馈3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。
第1章SD卡指令集1.1 S D卡指令集
该章节提供了有价值的SD卡指令信息.
1.1.1 指令类型
下面是4种指令详细说明了控制SD卡。
●广播指令,没应答(bc)
●广播指令,有应答(bcr)
●寻址(点对点)指令(ac)
DAT上没数据传输。
●寻址(点对点)数据传输指令(adtc)
DAT上没数据传输。
所在的指令和应答都是通过SD卡的CMD线发送。
1.1.2 指令格式
1.1.3 指令类别
1.1.4 详细指令描述
表 1.1 基本指令(Class 0 And Class 1)
表 1.2 块读指令(Class 2)
表 1.3 块写指令(Class 4)
表 1.4 写保护(Class 6)
表 1.5 指令(Class 5)
表 1.6 锁卡指令(Class 7)
表 1.7 特殊应用指令(Class 8)
使用以下指令之前先执行APP_CMD指令(CMD55)。
表 1.8 特殊应用指在SD总线上使用/保留。
概述众所周知,3D打印机执行的是一堆指令,这一堆指令都来源于一个指令集,即G-M指令集。
而固件就负责解释这些指令,并将命令指派给电子原件,从而完成打印任务。
因此,固件和指令集必须相互配合,否则打印机不会正常工作。
开源的3D打印机使用的固件多种多样,但和这些固件匹配的指令集绝大多数指令都相同,即RepRap G-M指令集。
由于Marlin固件使用的最为广泛,笔者就以Marlin固件的指令集为例作叙述。
了解G-M指令有什么用?这用处可大了。
帮助使用者更方便地调试打印机,检测打印机的问题,扩展打印机菜单功能…反正好处多多,不管你信不信,反正我是信了。
废话不多说,进入正题。
G-M指令集就是一些以G或M开头的代码,有时候还会掺杂一些以其其他字母以标示参数意义,比如T、S、F、P等。
具体意义见下表,表中nnn表示数字。
因此,能够被Marlin固件识别的代码应该是像下面的样子:详解注释G-Code一行中分号“;”后面的内容为解释性语句,即注释。
固件会忽略其内容。
为了减少通信量,可以把注释信息都去掉。
标记代码N 和*,比如N123 [...G Code 写在这里...] *71。
这是行码和标记码。
RepRap 的固件会以一个本地计算的值来对比标记码,如果两者值不同,就会要求重复输入该条指令。
行码和检查码都可以去掉,RepRap仍会工作, 但它不会做检查。
你必须同时使用,或同时放弃使用。
检查码cs 是通过对对应的指令(包括它的的行码)的原始字节数据进行异或位运算得出的。
检查码cs的值即是其*符号右边的十进制数字,RepRap固件希望每次命令的行代码都是逐次增加1的大小,不然的话,它会返回一个错误。
当然你也可以发送一个M110命令(详情请看下面)强行重置机器。
行码和检查码是为了减少信号干扰。
延时G 命令RepRap固件接收到这些指令后,会先存储在一个循环队列缓存里再执行。
这意味着固件在接收到一条指令后马上可以传输下一条。
ARM指令集中的数据传送指令主要用于在寄存器和内存之间传输数据。
以下是一些常用的数据传送指令:
1. LDR - 加载寄存器指令。
用于从内存加载数据到寄存器。
2. STR - 存储寄存器指令。
用于将数据从寄存器存储到内存。
3. LDRB - 加载字节指令。
用于从内存加载一个字节的数据到寄存器。
4. STRB - 存储字节指令。
用于将一个字节的数据从寄存器存储到内存。
5. LDRH - 加载半字指令。
用于从内存加载一个半字的数据到寄存器。
6. STRH - 存储半字指令。
用于将一个半字的数据从寄存器存储到内存。
7. LDRD - 加载双字指令。
用于从内存加载一个双字的数据到寄存器。
8. STRD - 存储双字指令。
用于将一个双字的数据从寄存器存储到内存。
9. PUSH - 入栈指令。
用于将寄存器的值推送到堆栈中。
10. POP - 出栈指令。
用于从堆栈中弹出值并将其存储到寄存器中。
这些指令可以配合使用 ARM 的地址计算和跳转指令来完成更复杂的内存操作和数据处理任务。
请注意,具体支持的指令可能会因ARM 架构版本和处理器型号而有所不同。
述嵌入式系统的定义。
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
1-2.简述嵌入式系统的组成。
从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。
其中嵌入式处理器通常是单片机或微控制器,支撑硬件主要包括存储介质、通信部件和显示部件等,嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件及应用中间件等。
嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统和嵌入式系统应用。
嵌入式系统硬件平台为各种嵌入式器件、设备(如ARM、Power PC、Xscale、MIPS 等);嵌入式操作系统是指在嵌入式Linux、u CLinux、Win CE 等。
ARM7与ARM9的区别1-3.ARM7处理器使用的是(ARMv4)指令集。
ARM7 内核采用冯·诺依曼体系结构,数据和指令使用同一条总线。
内核有一条3级流水线,执行ARMv4 指令集。
1-6.ARM9采用的是(5)级流水线设计。
存储器系统根据哈佛体系结构(程序和数据空间独立的体系结构)重新设计,区分数据总线和指令总线内存管理单元MMU定义:提供专门负责存储管理的部件。
作用:实现地址映射;对地址访问进行保护和限制ARM核有多少个寄存器?ARM处理器有37个32位长的寄存器;(1)30个通用寄存器;(2)6个状态寄存器(3)1个pc2、ARM处理器:ARM处理器是英国ARM(Advanced RISC Machines)公司设计的全球领先的16/32位RISC微处理器,ARM公司通过转让RISC微处理器,外围和系统芯片设计技术给合作伙伴,使他们能用这些技术来生产各具特色的芯片。
4、异常:当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。
6、ARM微处理器内核是如何进行异常处理的?答:1)当异常产生时,ARM内核拷贝CPSR到SPSR_<mode>,设置适当的CPSR位:改变处理器状态进入ARM态,改变处理器模式进入相应的异常模式,设置中断禁止位禁止相应中断(如果需要);保存返回地址到LR_<mode>,设置PC为相应的异常向量。
SDW系列智能显示终端指令集V6.2武汉中显科技有限公司修改记录目录1. 用户软件开发步骤 (5)2. 色彩定义 (5)3. 串口说明 (5)3.1 串口工作模式 (5)3.2 指令结构 (5)3.3 通信缓冲区 (5)3.4 字节传送顺序 (6)4. 指令速查表 (7)5. 指令集说明 (11)5.1 握手指令(0x000A 0x00) (11)5.2 设置当前调色板(0x40) (12)5.3 设置字符显示间距(0x41) (12)5.4 取指定位置颜色(0x42,0x43) (12)5.5 光标显示(0x44) (13)5.6 文本显示(0x54,0x55,0x6E,0x6F,0x98,0x45) (13)5.7 变量显示(0x1A) (20)5.8 点显示(0x50,0x51,0x74,0x72) (22)5.9 连线显示(0x56,0x5D,0x6A01,0x75,0x76,0x78) (24)5.10 矩形显示 (25)5.11 全屏清屏(0x52) (27)5.12 指定区域平移(0x60,0x61,0x62,0x63) (27)5.13 图片或图标显示(0x70,0x71,0x99,0xE2,0X7B) (27)5.14 背光亮度控制(0x5E,0x5F) (31)5.15 工作模式配置(0xE0) (32)5.16 触摸屏操作(0x72,0x73,0x78,0x79,0x01,0xE4) (32)5.17 键盘及IO口操作(0x70,0x71,0x 34,0x35,0x36) (33)5.18 用户数据存储器读写(0x90,0x91,0x92,0x93,0x94) (34)5.19 蜂鸣器控制(0x79) (36)5.20 实时时钟RTC(0x9B,0xE7) (36)5.21 圆与圆弧显示(0x57,0x6a02,0x6a03) (38)5.22 椭圆显示(0x58) (39)5.23 暂存缓冲区操作(0xC0,0xC1,0xC2) (39)6. 触摸屏与触控界面设计 (45)6.1 触摸屏相关指令 (45)6.2 触控界面与触控配置文件 (46)7. 键盘接口与键控界面设计 (48)7.1 键盘接口与GPIO口介绍 (48)7.2 键码及按键码表 (50)7.3 键盘相关指令 (51)7.4 键控界面与键控配置文件 (52)8. 配置文件 (53)8.1 图标配置文件 (53)8.2 批处理指令配置文件 (54)9. 实用控件 (56)9.1 虚拟键盘控件-触摸屏(数字中英文输入) (56)9.2 矩阵键盘控件(数字英文输入) (58)9.3 菜单/列表控件 (60)9.4 变量控件 (63)9.5 表盘控件 (65)9.6 自动循环控件 (68)10. CRC校验码生成函数 (70)附录1:C51例程 (71)附录2:ASM51例程 (73)附录3:典型电路图 (75)1. 用户软件开发步骤SDW系列智能显示终端用户软件开发过程分为二步:第一步:将SDW系列智能显示终端通过串口与电脑连接。
SD卡引脚定义针脚名称类型描述1.C D DAT3 I/O/PP 卡监测数据位32.C MD PP 命令/回复3.Vss S 地4.V cc S 供电电压5.C LK I 时钟6.C ss2 S 地7.D AT0 I/O/PP 数据位08.D AT1 I/O/PP 数据位19.D AT2 I/O/PP 数据位2SD卡接口标准规范SD卡上所有单元由内部时钟发生器提供时钟。
接口驱动单元同步外部时钟的DAT和CMD信号到内部所用时钟。
本卡由6线SD卡接口控制,包括:CMD,CLK,DAT0-DAT3。
在多SD卡垛叠中为了标识SD卡,一个卡标识寄存器(CID)和一个相应地址寄存器(RCA)预先准备好。
一个附加的寄存器包括不同类型操作参数。
这个寄存器叫做CSD。
使用SD卡线访问存储器还是寄存器的通信由SD卡标准定义。
卡有自己的电源开通检测单元。
无需附加的主复位信号来在电源开启后安装卡。
它防短路,在带电插入或移出卡时。
无需外部编程电压。
编程电压卡内生成。
SD卡支持第二接口工作模式SPI。
如果接到复位命令(CMD0)时,CS信号有效(低电平),SPI 模式启用。
SD卡接口规范(完整规范标准)特性:◎容量:32MB/64MB/128MB/256MB/512MB/1GByte◎兼容规范版本1.01◎卡上错误校正◎支持CPRM◎两个可选的通信协议:SD模式和SPI模式◎可变时钟频率0-25MHz◎通信电压范围:2.0-3.6V工作电压范围:2.0-3.6V◎低电压消耗:自动断电及自动睡醒,智能电源管理◎无需额外编程电压◎卡片带电插拔保护◎正向兼容MMC卡◎高速串行接口带随即存取---支持双通道闪存交叉存取---快写技术:一个低成本的方案,能够超高速闪存访问和高可靠数据存储---最大读写速率:10Mbyte/s◎最大10个堆叠的卡(20MHz,Vcc=2.7-3.6V)◎数据寿命:10万次编程/擦除◎CE和FCC认证◎PIP封装技术◎尺寸:24mm宽×32mm长×1.44mm厚本SD卡高度集成闪存,具备串行和随机存取能力。
SD卡有很多种类型的命令,有初始化的,特殊功能开启关闭的,寄存器查看的,读和写的,官方给出的分类更清楚一些,不过在一般使用中,我们并不需要了解的多么复杂,只要掌握了最基本的初始化命令,和读写命令,SD卡的操作就能够实现了。
每一个命令的长度都是固定的6个字节,前1个字节的值=命令号+0x40;中间4个字节为参数,不同的命令参数格式都不相同,但参数最多为4个字节;最后1个字节是CRC校验码和1位固定结束位‘1’。
这里需要说明一下0x40的意思,任何命令都有一个固定的起始格式,即先0后1,这是固定的命令起始标志,前两个字节的二进制码就是:01xx xxxx需要特殊说明的是CRC的问题,这是一种检验错误的方法,具体问题度娘说的还算明白,在SPI 模式中,CRC校验默认是关闭的,也就是说这7位必须要发,但是SD卡会在读到CRC以后自动忽略它,所以全部发1就可以。
例外的是,CMD0,CMD8这两个命令发送的时候SD卡还没有进入SPI模式,也就是说CRC校验在这个时候还是启用状态,因此这两个命令的CRC效验码必须要写正确,SD卡才会执行命令,否在在返回值R1中就会有相应的错误标志位提示开发人员CRC校验码错误。
CMD0:0x40,0x00,0x00,0x00,0x00,0x954个字节的参数都为stuff bits 填充位,那就全0即可,最后一个字节CRC是固定的CMD8:0x48,0x00,0x00,0x01,0xaa,0x870x40的固定值+8=0x48;Reserved bits也是可以填充为0的位,VHS支持电压的说明可参考datasheet,需要说明的是参数的最后1byte检查位,这个字节的内容会在R7中原原本本的返回给用户,但是这个字节的不同决定了7位CRC的不同,网上的例子一般都发0xaa,那对应的CRC码+结束位就是0x87。
A CMD41属于附加命令,发送起来要麻烦一些,必须提前通知SD卡下一条要发送的命令为ACMD,这个通知就是CMD55,它的4字节参数都为0即可,CMD55 :0x77,0x00,0x00,0x00,0x00,0xff.0x77 = 0x40 + 0x37(55的16进制表示);CRC可以忽略不要都发1即可 0xff.ACMD41:0x69,0x40,0x00,0x00,0x00,0xff.第一个字节算法同理,第一个参数从DATASHEET可以看出HCS位被置1了,目的是为了告诉SD卡我的MCU支持SDHC卡,如果SD卡不回应CMD8也就是说当前SD卡为1.0版本,那么发送ACMD41时SD卡会自动忽略这个位。
SD卡初始化以及命令详解SD卡是嵌⼊式设备中很常⽤的⼀种存储设备,体积⼩,容量⼤,通讯简单,电路简单所以受到很多设备⼚商的欢迎,主要⽤来记录设备运⾏过程中的各种信息,以及程序的各种配置信息,很是⽅便,有这样⼏点是需要知道的SD 卡是基于 flash 的存储卡。
SD 卡和 MMC 卡的区别在于初始化过程不同。
SD卡并不是我们通常意义上的⼿机扩展卡,那种卡叫做TF卡,但是通讯以及驱动模式是类似的. SD 卡的通信协议包括 SD 和 SPI 两类,SD卡上电之后默认处于SD状态。
SD 卡使⽤卡内智能控制模块进⾏ FLASH 操作控制,包括协议、安全算法、数据存取、ECC 算法、缺陷处理和分析、电源管理、时钟管理。
这些都不需要⽤户关系,这是SD卡⼚商做的事情驱动SD卡主要要实现读扇区,写扇区,初始化,获取SD卡相关配置信息这⼏个就可以了,另外.SD卡本⾝只是⼀种数据介质,它不含有⽂件系统,⽂件系统是⼀种⽂件的组织格式,是独⽴于存储介质的⼀种规范标准SD卡引脚序列SD卡引脚功能表TF卡引脚排序TF卡引脚功能表由此可见,TF卡⽐SD卡少了⼀个VSS引脚,也就是少了⼀个供电引脚另外电路设计时若SD卡使⽤SPI模式,那么不⽤的⼏根数据线应加上上拉电阻,否者会因为这⼏根数据线的电流震荡引起电流损耗,造成电路上的不稳定SD卡电路SPI驱动模式SD卡内部有五个我们可以读取的寄存器,分别如下要读取这些信息就需要与卡通讯,SD通讯是⽤命令+数据的形式进⾏的,命令格式如下也就是说,⼀次SD卡命令发送⼀共要发送6个字节,对于SPI通讯⽽⾔,就是SPI总线上传送六个字节字节 1 的最⾼ 2 位固定为 01,低 6 位为命令号(⽐如 CMD16,为 10000 即 16 进制的 0X10,完整的 CMD16,第⼀个字节为 01010000,即 0X10+0X40)。
字节 2~5 为命令参数,有些命令是没有参数的。
对于没有参数的命令默认发送0即可字节 6 的⾼七位为 CRC 值,最低位恒定为 1,crc计算遵循以下规律GX为⽣成多项式,具体计算⽅法请查看CRC计算相关,不过有⼀点好处就是,在SPI驱动模式下,不需要CRC校验(默认SD卡在SPI模式下不开启CRC校验,在SD模式下默认开始CRC校验),所以我们只需要对CMD0进⾏CRC就可以了,后⾯的CRC都可以不管(因为在CMD0之前是SD模式,所以第⼀个命令需要,切换之后就不⽤了),⽽CMD0的CRC为0x95(加上了之后的⼀位1)注:SPI模式下打开crc校验需要⽤到CMD59的保留命令,请查阅相关资料SD卡的命令表如下所⽰(以下仅写出SPI模式的CMD)CMD0 复位SD卡, 重置所有卡到 Idle状态,参数为0CMD1 设置SD卡到ACTIVATE模式,也就是推出IDLE模式CMD8 发送接⼝状态命令CMD9 读取CSD寄存器CMD10 读取CID寄存器CMD12 在多块读取的时候请求停⽌读取CMD13读取SD卡状态寄存器CMD16 设置单个扇区的⼤⼩⼀般都设置为512字节⼀个扇区CMD17 读取扇区命令CMD18 读取多个扇区知道发送停⽌命令CMD24 写扇区命令CMD25 写多个扇区命令CMD27 编辑CSD位CMD28设置地址组保护位。
1.SD卡的命令格式:
SD卡的指令由6字节(Byte)组成,如下:
Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x27,那么完整的CMD39第一字节为01100111,即0x27+0x40)
Byte2-5:Command Arguments,命令参数,有些命令没有参数
Byte6:前7位为CRC(Cyclic Redundacy Check,循环冗余校验)校验位,最后一位为停止位0
2.SD卡的命令
SD卡命令共分为12类,分别为class0到class11,
不同的SDd卡,主控根据其功能,支持不同的命令集如下:
Class0 :(卡的识别、初始化等基本命令集)
CMD0:复位SD 卡.
CMD1:读OCR寄存器.
CMD9:读CSD寄存器.
CMD10:读CID寄存器.
CMD12:停止读多块时的数据传输
CMD13:读Card_Status 寄存器
Class2 (读卡命令集):
CMD16:设置块的长度
CMD17:读单块.
CMD18:读多块,直至主机发送CMD12为止 .
Class4(写卡命令集) :
CMD24:写单块.
CMD25:写多块.
CMD27:写CSD寄存器 .
Class5 (擦除卡命令集):
CMD32:设置擦除块的起始地址.
CMD33:设置擦除块的终止地址.
CMD38: 擦除所选择的块.
Class6(写保护命令集):
CMD28:设置写保护块的地址.
CMD29:擦除写保护块的地址.
CMD30: Ask the card for the status of the write protection bits
class7:卡的锁定,解锁功能命令集
class8:申请特定命令集。
class10 -11 :保留
其中class1, class3,class9:SPI模式不支持
了解了指令的形式和具体的控制内容,下面主要解决的就是MCU与SD卡的通信问题,通信主要需要注意下面的问题:
(1)供电电压:必须是3.3V
(2) 通信模式的切换:SD卡有两种通信模式:SPI模式和SD模式,默认情况下的通信模式是SD模式,但是我们常用的模式是SPI模式,这就需要一个切换模式的方法,具体的实现方法在其他地方也都有介绍,其关键的地方就是先上电延时大于74个时钟周期后发送复位命令,复位成功(接收到0x01的响应)后,连续发送CMD55和ACMD41,直到响应0X00为止,此时SD卡已经进入SPI模式。
(3)上面所说的发送复位命令(CMD0)以及CMD55和ACMD41要有具体的实现方法,需要解决的就是时序问题,。