当前位置:文档之家› STM32学习笔记之SD卡V2.0协议初始化

STM32学习笔记之SD卡V2.0协议初始化

STM32学习笔记

----SD卡V2.0协议初始化

现在使用的4G的SD卡,小于或等于2G的卡是属于标准SD卡,而大于2G的卡小于32G的卡是大容量SD卡,也就是SDHC卡。对于SDHC卡的初始化和操作要使用V2.0协议。看了几天的SD卡v2.0协议,现在总结一下啊。

首先是一个流程图,这个图在官方资料上有:

第一步操作:复位

SD卡上电后先发送(>74个时钟),因为SD卡有个供电电压上升过程需要大约64个时钟,之后的10个时钟是用来与SD卡同步(参考《例说STM32》)。参考代码:

for(count=0;count<15;count++)

SPI_WriteReadByte(0xff);//产生74个以上的脉冲

SD卡默认是SD模式,现在用STM32去操作,切换为SPI模式后更好操作。所以

在片选为低时发送CMD0,此时卡进入IDLE状态,因为CMD0回应的命令是R1,根据上面R1的回应格式可以看出我们自需要检查最低位就知道是否处于IDLE 状态。参考代码:

do

{

tmp=SD_WriteCommand(CMD0,0,0X95);//发送SD

count++;

}while((tmp!=0x01)&&(count

第二步操作发送CMD8来分辨卡的类型,是V2.0卡还是V1.0卡或MMC卡,还可以检测CMD8响应返回的数据判断是否支持给定的工作电压范围。

根据流程图可以看出。

1.如果SD卡支持当前的电压就会返回R7,并包含CMD8的参数部分,其中包括:Check voltage和check pattern。

2.如果SD卡不支持当前的工作电压则不会返回任何响应信息,继续处在IDLE 状态。如果是V1.0x的SD卡也不会有响应。

3.在PLV2.0(physical layer version2.0)下,在首次执行ACMD41之前,必须执行CMD8指令,用以初始化SDHC卡,SDHC卡根据是否接收到CMD8指令来鉴别控制器是否支持PLV2.0协议。使用低电压的控制器也必须在ACMD41命令之前发送CMD8,避免可以工作在两种电压模式下的SD卡因为没有接收到CMD8,而默认工作在高电压环境下,被误认为是只支持高电压工作模式。

Application Note:

It is recommended to use‘10101010b’for the‘check pattern’.

R7的格式:

从上面可以看到,R7为5个字节,在发送CMD8后,SD卡响应,发送回来的第一个字节就是R1,之后的4个字节中就包含了Check voltage和check pattern。下面是仿真的结果:

判断Check voltage按照如下标准:

根据流程图就可以看出发送CMD8后SD卡的类型基本上分了两类。

第三步:由ACMD41来初始化SD卡,SD卡的初始化从收到ACMD41开始。ACMD指令的HCS(Host Capacity Support)位如果设定为1的话,表明控制器支持SDHC卡,否则表示不支持。

SD卡初始化和识别过程:

在CMD8命令发送之后的ACMD41指令其功能有所扩展,在参数里多了HCS部分,在响应里面多了CCS(Card Capacity Status)部分。HCS参数会被不响应CMD8命令的SD卡所抛弃。控制器向不响应CMD8的卡发送ACMD41指令时,HCS位应

该设置为零0。如果向SDHC卡发送HCS位为0的ACMD41命令,SDHC卡返回的响应,其busy标识位永远为0,代表忙状态。HCS标识位用来表明SD卡是否已经完成初始化,如果未完成,HCS为零,否则为1,如果HCS为0,控制器会重复发送ACMD41指令,SD卡只检查首次接收到的ACMD41指令的HCS位。

按照流程图,现在发送ACMD41可以用来分辨是否为高容量卡。

SD_WriteCommand(CMD41,0x40000000,0X01);//发送ACMD41,流程图写的如果主机支持大容量就将HCS置1.所以发送0x40000000

因为ACMD41为应用型指令,所以前面要加上CMD55一起使用。

SD_WriteCommand(CMD55,0,0x01);

SD_WriteCommand(CMD41,0x40000000,0X01);

一直发送这两条指令,直到卡准备好。处于Ready状态。

所以接收到响应为0之后就可以开始读取OCR信息。并检测bit30位(CCS位),如果此位是1就是高容量卡,如果为0则是标准SD卡。读取OCR的指令是CMD58,其响应是R3:

前面的R1应该为0。

之后再接收4个字节的数据。并判断bit30位。就可以判断是SDV2.0还是SDV2.0HC。初始化完成

对于V1.0和MMC卡的初始化应该照着流程图搞也是一样的。

上面的只是个人的理解,参考了《SD卡2.0协议》,《SD卡协议学习点滴》,《例说STM32》.

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 内存组织 数据读写的基本单元是一个字节,可以按要求组织成不同的块。

DynamicsforSpaceClaim学习笔记(中文)

关节选项 关节类型 求解方式 碰撞 马达 关节类型 弹簧初始速度为零转矩限制 自动产生电机转矩 弹性 阻尼 范围;幅度 弹簧 位置 平移 转动

关节类型: 铰链 槽副, 圆柱形 求解方式: 直接 迭代 直接和迭代 Hinge 铰链副 铰链接头除去一个DOF(自由度),使受影响的刚体仅能围绕所选择的轴线旋转。与所有关节一样,有两种附接铰链接头的方式: 将其直接附接到属于刚体的实体的边缘或轴上,该实体附接在刚体和世界之间的接合处。将它连接在两个单独的实体(每个属于一个单独的刚体)之间。 在第一种情况下,您只需从功能区菜单中选择铰链工具,然后左键单击要添加关节的刚体的边缘或轴,黄色的铰链图标将出现在边缘或轴上。参见联合状态。 在第二种情况下,您希望通过铰链接头连接两个刚性体,只需从功能区菜单中选择铰链接头。然后,按住Ctrl键单击其中一个刚体,然后单击另一个刚体上的边缘或轴,铰链应该围绕其旋转。边缘或轴上将出现紫色铰链图标。参见联合状态。

当选择一个铰链(或多个铰链)时,可以从属性选项卡更改该铰链的属性。 接头属性 属性指定关节的初始状态。 启用:指定是否启用关节。 刚体之间的碰撞:指定是否可以在两个连接的刚体之间产生触点。默认为关闭。如果启用碰撞,如果两个物体具有重叠的几何结构,则可能会出现干扰效应。 类型:关节的类型。 求解类型:指定解决此关节的求解器。 直接和迭代:(默认),直接AND迭代求解器将看到这个关节。为了使材料对的分离解算器类型获得稳定的摩擦,迭代和直接求解器必须看到关节。 迭代- 只有迭代求解器将看到这个关节。将导致大质量比的不稳定性。 直接- 只有直接求解器会看到这个关节。当涉及具有拆分解决类型的材料对时,这可能导致伪影。 Component1:与此关节相关联的第一个组件的名称。 Component2:与此关节相关联的第二个组件的名称。 刚体1:与该关节相关的第一刚体的名称。 刚体2:与该关节相关的第二刚体的名称。 反向:只有当接头连接到两个物体时才可见。将交换两个附着的刚体,有效地翻转接头的方向。 角位置:此铰链接头的当前角度。 弹性

学习电子笔记

Mini2440 开发板硬件资源特性 CPU 处理器 - Samsung S3C2440A,主频400MHz,最高533Mhz SDRAM 内存 - 在板64M SDRAM - 32bit 数据总线 - SDRAM 时钟频率高达100MHz FLASH 存储 在板256M/1GB Nand Flash, 掉电非易失 在板2M Nor Flash,掉电非易失,已经安装BIOS LCD 显示 - 板上集成4 线电阻式触摸屏接口,可以直接连接四线电阻触摸屏 - 支持一线精准触摸屏 - 支持黑白、4 级灰度、16 级灰度、256 色、4096 色STN 液晶屏,尺寸从3.5 寸到12.1 寸,屏幕分辨率可 以达到1024x768 象素; - 支持黑白、4 级灰度、16 级灰度、256 色、64K 色、真彩色TFT 液晶屏,尺寸从3.5 寸到12.1 寸,屏幕 分辨率可以达到1024x768 象素; - 标准配置为统宝3.5”真彩LCD,分别率240x320,带触摸屏; 接口和资源 - 1 个100M 以太网RJ-45 接口(采用DM9000 网络芯片) - 3 个串行口 - 1 个USB Host - 1 个USB Slave B 型接口 - 1 个SD 卡存储接口 - 1 路立体声音频输出接口,一路麦克风接口; - 1 个2.0mm 间距10 针JTAG 接口 - 4 USER Leds - 6 USER buttons(带引出座) - 1 个PWM 控制蜂鸣器 - 1 个可调电阻,用于AD 模数转换测试 - 1 个I2C 总线AT24C08 芯片,用于I2C 总线测试 - 1 个2.0 mm 间距20pin 摄像头接口 - 板载实时时钟电池 - 电源接口(5V),带电源开关和指示灯 系统时钟源 - 12M 无源晶振 实时时钟 - 内部实时时钟(带后备锂电池) 扩展接口

arduino学习笔记18 - SD卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。 需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。这次我是用的是kingmax2G的MicroSD卡。 先看一下硬件连接图

把下面代码下载进arduino 控制板 /* 此例子展示如果记录三个模拟引脚数值到SD 卡,使用SD 库。

电路部分 * 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器, 如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。 * SD卡与arduino控制板使用SPI总线连接 ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 */ #include // CS引脚为pin4,这里也沿用官方默认设置 const int chipSelect = 4; //设定CS接口 void setup() { Serial.begin(9600); //设置串口通信波特率为9600 Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card... pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized. }

STM32笔记(六)SD卡的读写和FatFS文件系统

STM32笔记(六)SD卡的读写和FatFS文件系统 因为要用,学习了一下SPI操作SD卡,同时移植了一个免费开源的FAT文件系统:FatFS。感觉挺好,在单片机上实现了读写文件的操作,接下来就可以解释我的G代码咯! 我的SD卡底层操作参考了网上几种常见的代码,但又对其结构做了一定的优化,至少看起来用起来比较方便。既可以作为文件系统的diskio使用,也可以直接使用底层函数,把SD卡作为一块flash读写。 FatFs文件系统体积蛮小,6-7K足矣,对于128Kflash的STM32来说很合适,代价不大。同时可移植性很高,最少只需要4个函数修改既可以实现文件系统的移植。相关文件系统的介绍请看这里。 这里给一套比较完整的参考资料,包括fatfs文件系统的原版资料、几个重要的手册和网上下载的代码。 https://www.doczj.com/doc/a218041337.html,/bbs/bbs_content.jsp?bbs_sn=3210864&bbs_page_no=1&bbs_id=3020 下面是我的代码: 其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。下面是一些底层操作函数: u8 SPI_ReadWriteByte(u8 TxData); //SPI总线读写一个字节 u8 SD_WaitReady(void); //等待SD卡就绪 u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令 u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令,不断线 u8 SD_Init(void); //SD卡初始化 u8 SD_ReceiveData(u8 *data, u16 len, u8 release); //SD卡读数据 u8 SD_GetCID(u8 *cid_data); //读SD卡CID u8 SD_GetCSD(u8 *csd_data); //读SD卡CSD u32 SD_GetCapacity(void); //取SD卡容量 u8 SD_ReadSingleBlock(u32 sector, u8 *buffer); //读一个sector u8 SD_WriteSingleBlock(u32 sector, const u8 *buffer); //写一个sector u8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count); //读多个sector u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count); //写多个sector 这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。 DSTATUS disk_initialize ( BYTE drv /* Physical drive nmuber (0..) */ )

STM32学习笔记

1、GPIO函数: 输出: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//此例以PA12口为例 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //此例以PA12口为例 HAL_GPIO_ TogglePin(GPIOA,GPIO_PIN_12); //此例以PA12口为例 2、串口函数: 1、串口发送/接收函数 HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制 HAL_UART_Receive();串口轮询模式接收,使用超时管理机制 HAL_UART_Transmit_IT();串口中断模式发送 HAL_UART_Receive_IT();串口中断模式接收 HAL_UART_Transmit_DMA();串口DMA模式发送 HAL_UART_Transmit_DMA();串口DMA模式接收 2、串口中断函数 HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用 HAL_UART_TxCpltCallback();数据完全发送完成后调用 HAL_UART_RxHalfCpltCallback();一半数据接收完成时调用 HAL_UART_RxCpltCallback();数据完全接受完成后调用 HAL_UART_ErrorCallback();传输出现错误时调用 例程:串口接收中断 uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n"; uint8_t aRxBuffer[20]; 2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中 HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度 HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10); 3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { UNUSED(huart); HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时可以在中间加任何可执行代码。 }

2021年sd卡学习笔记之令狐采学创编

1、简介: SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。 SD 卡内部结构及引脚如下图所示: 欧阳光明(2021.03.07) SD卡内部图.JPG

2、SD卡管脚图: SD卡图.JPG 3、SPI模式下SD各管脚名称为: sd 卡: SPI模式下SD各管脚名称为.JPG 注:一般SD有两种模式:SD模式和SPI模式,管脚定义如下:(A)、SD MODE 1、CD/DATA3 2、CMD 3、VSS1 4、VDD 5、CLK 6、VSS2 7、DATA0 8、DATA1 9、DATA2 (B)、SPI MODE 1、CS 2、DI 3、VSS 4、VDD 5、SCLK 6、VSS2 7、DO 8、RSV 9、RSV SD 卡主要引脚和功能为: CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率; CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡; DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。

SD卡以命令形式来控制SD卡的读写等操作。可根据命令对多块或单块进行读写操作。在SPI模式下其命令由6个字节构成,其中高位在前。SD卡命令的格式如表1所示,其中相关参数可以查阅SD 卡规范。 4、MicroSD卡管脚图: MicroSD卡管脚图.JPG 5、MicroSD卡管脚名称: MicroSD卡管脚名称.JPG SD 卡与MicroSD卡仅仅是封装上的不同,MicroSD卡更小,大小上和一个SIM卡差不多,但是协议与SD卡相同。一般我们用单片机操作SD 卡时,都不需要对FAT分区表信息做处理,原因如下:1)、操作FAT分区表要增加程序代码量、增加SRAM的消耗,对于便携应用来说代码大小和占用SRAM的多少至关重要。 2)、即使我们对FAT分区表不做任何了解,实际上我们一样可以向SD卡上写入数据,这就表明使用FAT对我们做数据存储应用来说如同鸡肋。

mcnp学习心得

【引用】MCNP计数心得 2011-02-20 21:10:36| 分类:MCNP | 标签:|字号大中小订阅 本文引用自青楼薄名《MCNP计数心得》 一.计数器的选择及其意义 By Alex Young 2010年5月18日星期二 F2 面通量密度 F4 体通量密度 F7 栅元内的裂变沉积能 1.Tally F4 对于各种计数器相应的SD卡的问题: F4:n 12 sd 1 注:cell 12 的实际体积为1.55345E+07cc。并且该体积是mcnp能够自己计算出来的话,可以不用 sd卡。 1) 不用sd卡得出的结果为2.76091E-06 1/cm^2,表示的是在cell 12内,1个源中子的径迹长度总和 在cell 12体积上的平均值,即可以理解为体通量密度; 2) 假设用了sd卡,且为sd 1,则计数结果为4.28893E+01,表示在cell 12的全部体积内,1个源 中子的径迹长度总和,即可以理解为体通量=2.76091E-06*1.55345E+07。 3) 假设cell 12的体积不能被mcnp自己计算出(主要原因是在使用U卡和fill卡,一般都是使用的无限长度的空间与某一曲面截断从而封闭的,因此mcnp不能计算体积;还有就是某些非旋转体,mcnp 也不能计算体积),此时需要使用sd卡。如果不使用sd卡,运行程序时会报错,“所计数栅元的体积不能计算或没有给出”。这时,一般来说,要计算通量密度的话,都需要在sd卡上给出栅元的实际体积。若给出的是sd 1,意义与上2)中分析的相同,具体实例如下所示: f14:n (120<13[0 0 0]) (20<13[1 0 0]) (110<13[2 0 0]) (70<13[3 0 0]) (80<13[4 0 0]) (150<13[5 0 0]) (100<13[6 0 0]) (20<13[0 1 0]) (60<13[1 1 0]) (70<13[2 1 0]) (80<13[3 1 0]) (70<13[4 1 0]) (90<13[5 1 0]) (100<13[6 1 0]) (110<13[0 2 0]) (70<13[1 2 0]) (120<13[2 2 0]) (70<13[3 2 0]) (80<13[4 2 0]) (130<13[5 2 0]) (70<13[0 3 0]) (80<13[1 3 0]) (70<13[2 3 0]) (60<13[3 3 0]) (140<13[4 3 0]) (100<13[5 3 0]) (80<13[0 4 0]) (70<13[1 4 0]) (80<13[2 4 0]) (140<13[3 4 0])

SDXC卡协议整理学习笔记

SD 卡协议学习点滴(一)
1.0 SD Card spec 2.0 基本特点:

1.1 SD 卡基本概念
首先 SD 卡有所谓操作模式(operation mode)的概念,每种操作模式又具体对应一种或 多种状态,主机通过发送命令可以使 SD 卡在不同的状态间转换,SD 卡则接受命令,并根 据自己现在所处状态做出不同的响应。
系统上电时刻或者搜寻 SD 卡时,SD 卡控制器应该处于 SD 卡识别模式;SD 卡在刚接 入系统时刻也处于这种模式,并且处于此模式下的 Idle 状态。 SD卡识别模式:在这种模式下,控制器会检验SD卡的工作电压范围,识别SD卡类型,并要 求它们发送各自的相对地址(Relative Card Address) ;这些操作在SD卡各自的CMD线上进 行。所有的操作均使用默认的 SD卡识别时钟频率(identification clock rate) SD卡复位:发送GO_IDLE_STATE(CMD0)到SD卡后,除处于非活动状态(Inactive state) 之外的SD卡都会进入空闲状态(Idle state) ;在Idle状态,SD卡的CMD线处于输入模式,默 认相对地址为 0x0000,默认驱动寄存器设定为最低速度,最大驱动电流能力。
1.2 工作条件检测
在控制器和 SD 卡进行任何通信之前,控制器不清楚 SD 卡支持的工作电压范围,故而控制 器首先使用默认的电压发送一条 reset 指令(CMD0) ,紧跟着的 CMD8 指令,用于取得 SD 卡支持工作电压范围数据。 卡通过检测 CMD8 的参数部分来检查控制器使用的工作电压, SD 控制器通过分析回传的 CMD8 参数部分来校验 SD 卡是否可以在所给电压下工作。如果 SD 卡可以在指定电压下工作,则它回送 CMD8 的命令响应字,其中包含 check voltage, check pattern。如果 SD 卡不支持所给电压,则 SD 卡不会给出任何响应信息,并继续处于 Idle 状 态。在 PLV2.0(physical layer version2.0)下,在首次执行 ACMD41 之前,必须执行 CMD8 指 令,用以初始化 SDHC 卡,SDHC 卡根据是否接收到 CMD8 指令来鉴别控制器是否支持 PLV2.0 协议。使用低电压的控制器也必须在 ACMD41 命令之前发送 CMD8,避免可以工作 在两种电压模式下的 SD 卡因为没有接收到 CMD8, 而默认工作在高电压环境下,被误认 为是只支持高电压工作模式。 SD_SEND_OP_COND(ACMD41)命令的目的是给予 SD 卡控制器一个识别 SD 卡是否可以在

界面学习总结

个人学习总结 的使用 其使用步骤具体如下: ①在Layout/中定义一个T extView, 然后设置一些属性 其具体知识可以参考: ②在src/中声明一个TextView private TextView mTextView01; ③利用findViewById()方法获取中的TextView 的使用和TextView类似 的使用 与TextView、EditView的区别主要是:一般为Button绑定一个监听器,操作如下 ①在Layout/中定义一个Button ②在src/中声明一个Button ③利用findViewById()方法获取中的Button ④写监听器代码 (new OnClickListener(){

public void onClick(View v){ AlertDialog对话框的使用 new .setTitle("Android提示").setMessage("您确定静音登录吗").setPositiveButton("确定",new () { public void onClick(DialogInterface dialog, int whichButton) { etNegativeButton("取消", new () { public void onClick(DialogInterface dialog, int whichButton) { how(); 的使用 这里省略定义、声明、获取都已经省略了,关键是写checkBox的监听器:setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 菜单(options menu)的使用 options menu在屏幕底部最多只能显示6个菜单项 /** * 创建子菜单,在点击Mune时会弹出子菜单 */ @Override public boolean onCreateOptionsMenu(Menu menu) { 个Activity之间的跳转

sd卡学习笔记

1、简介: SD 卡(Secure Digital Memory Card )是一种为满足安全性、容量、性能和使用环境等各方面 的需求而设计的一种新型存储器件,SD 卡允许在两种模式下工作,即SD 模式和SPI 模式,本系统采用SPI 模式。本小节仅简要介绍在SPI 模式下,STM32 处理器如何读写SD 卡,如果读者如希望详细了解SD 卡,可以参考相关资料。 SD 卡内部结构及引脚如下图所示: SD 卡内部图.JPG 2、SD 卡管脚图:

SD 卡图.JPG 3、SPI 模式下SD 各管脚名称为: sd 卡:

SPI 模式下SD 各管脚名称为.JPG 注:一般SD 有两种模式:SD 模式和SPI 模式,管脚定义如下: (A)、SD MODE 1 、CD/DATA3 2、CMD 3 、VSS1 4 、VDD 5 、CLK 6 、VSS2 7 、DATA0 8、DATA1 9 、DATA2 (B)、SPI MODE 1 、CS 2、DI 3 、VSS 4 、VDD 5 、SCLK 6 、VSS2 7 、DO 8、RSV 9 、RSV SD 卡主要引脚和功能为: CLK :时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz 之间变化,SD 卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率; CMD :双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址, 也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡; DAT0 ~3:数据线,数据可以从卡传向主机也可以从主机传向卡。 SD 卡以命令形式来控制SD 卡的读写等操作。可根据命令对多块或单块进行读写操作。在SPI 模式下其命令由 6 个字节构成,其中高位在前。SD 卡命令的格式如表 1 所示,其中相关参数可 以查阅SD 卡规范。

第一行代码Android知识点总结

第一行代码知识点总结 1、Android四层架构:Linux内核层(提供底层驱动)、系 统运行库层(提供特性支持,一些核心库)、应用框架 层(提供各种API)和应用层 2、Android四大组件:活动(activity)、服务(Service)、 广播接收器(Broadcast Receiver)和内容提供器 (Content Provider) 3、Android应用特色开发:四大组件、丰富的系统控件、 SQL数据库(轻量级,运算速度快的嵌入式关系型数 据库)、强大的多媒体和地理位置定位(LBS)。 4、Android程序设计讲究逻辑和视图分离,通常在布局文件中编写在界面 4.1Android的日志工具Log:Log.d()打印调试信息对应debug。Log.v()打印琐碎、意义最小日志,对应verbose,Log.i()打印比较重要的数据对应info;Log.w()打印警告信息对应error;Log.e()打印错误信息对应error。Log.d(类名,打印内容) 4.2活动:主要用于和用户进行交互、基本用法 4.3活动中的提醒方式Toast 4.4、drawable存放图片,mipmap存放应用图标,values 放字符串、样式,颜色等配置,layout放布局文件

4.5、Android Studio是采用Gradle来构建项目 5、Intent的使用:显式Intent和隐式Intent() 6、活动的生命周期 7、返回栈的定义 8、Android是使用任务来管理活动的 9、活动状态:运行、暂停、停止、销毁状态 10、Activity类中的七个回调方法:onCreate()onStaart()、onResume()、onPause()、onStop()、onDestroy()和onRestart() 11、活动的三种生存期:完整、可见、前台 12、活动的四种启动模式:standard、singleTop、singleTask 和singleInstance 13、常用控件:TextView、Button、EditText、ImageView、ProgressBar(进度条)、AlertDialog(对话框)、ProgressDialog(显示对话框时出现进度条) 14、基本布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)百分比布局、AbsoluteLayout、TableLayout 15、常用和最难用的控件ListView 16、滚动控件:RecyclerView 17、碎片的定义、使用方式、碎片的生命周期、状态和回调 18、广播主要的两种类型:标准广播和有序广播;注册广播

51单片机读写SD卡程序实例完整版(学习)

SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先来讲解SD卡的读写时序。 (1)SD卡的引脚定义: SD卡引脚功能详述: 注: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方式进行介绍。 (2) SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。 1)命令与数据传输 1. 命令传输 SD卡自身有完备的命令系统,以实现各项操作。命令格式如下: 命令的传输过程采用发送应答机制,过程如下:

DroidDraw学习笔记(中文)

1、GUI可视化设计器 DroidDraw Dr oidDraw是基于Java Swing的Android界面设计器,可以通过它生成复杂的Android Layout Xml文件。 2、AnDroidDrow AnDroidDrow是与DroidDraw集成的Android应用程序,它允许你从DroidDraw应用程序下载你的GUI,也允许你在一个AnDroidDraw设备上预览你的GUI。 步骤零: 下载AnDroidDraw.apk 使用adb install AnDroidDraw.apk把它安装到你的Android设备上。(参考CSDN做的笔记) 安装一个端口转发规则:adb forward tcp:6100 tcp:7100 步骤一: 在你的Android设备上运行AnDroidDraw,你应该看到这样。

步骤二: 在你的电脑上运行DroidDraw,并创建一个GUI,接下来从DroidDraw菜单中选择“project->send GUI to Device”。步骤三: 现在可以在Android屏幕看到新创建的GUI的XML。如图。

步骤四: 点击“preview Layout”按钮预览你的GUI。 步骤五: 当你结束时,点击向后的箭头,来返回AnDroidDraw的主屏幕。 记住:如果你感兴趣,你可以在文件框中编辑该XML文件,并且你再次点击“Preview layout”来查看修改。然而,这些修改并不会返回到DroidDraw。

步骤六: OK。 DroidDraw教程一:Currency Converter 步骤零: 本教程讲给你一个简短的介绍,关于使用DroidDraw用户界面设计器来开发一个Android上的GUI应用程序。 步骤一: 登陆到DroidDraw UI Designer. 步骤二: 设置根布局为RelativeLayout(相对布局) 步骤三: 选择“layouts”标签

arduino学习笔记18---SD卡读写实验教程文件

a r d u i n o学习笔记18---S D卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。 需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。这次我是用的是kingmax2G的MicroSD卡。 先看一下硬件连接图

把下面代码下载进arduino控制板 /* 此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。

电路部分 * 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器, 如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。 * SD卡与arduino控制板使用SPI总线连接 ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 */ #include // CS引脚为pin4,这里也沿用官方默认设置 const int chipSelect = 4; //设定CS接口 void setup() { Serial.begin(9600); //设置串口通信波特率为9600 Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card... pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized. }

STM32学习笔记之SD卡V2.0协议初始化

STM32学习笔记 ----SD卡V2.0协议初始化

现在使用的4G的SD卡,小于或等于2G的卡是属于标准SD卡,而大于2G的卡小于32G的卡是大容量SD卡,也就是SDHC卡。对于SDHC卡的初始化和操作要使用V2.0协议。看了几天的SD卡v2.0协议,现在总结一下啊。 首先是一个流程图,这个图在官方资料上有:

第一步操作:复位 SD卡上电后先发送(>74个时钟),因为SD卡有个供电电压上升过程需要大约64个时钟,之后的10个时钟是用来与SD卡同步(参考《例说STM32》)。参考代码: for(count=0;count<15;count++) SPI_WriteReadByte(0xff);//产生74个以上的脉冲 SD卡默认是SD模式,现在用STM32去操作,切换为SPI模式后更好操作。所以

在片选为低时发送CMD0,此时卡进入IDLE状态,因为CMD0回应的命令是R1,根据上面R1的回应格式可以看出我们自需要检查最低位就知道是否处于IDLE 状态。参考代码: do { tmp=SD_WriteCommand(CMD0,0,0X95);//发送SD count++; }while((tmp!=0x01)&&(count

android学习笔记文件路径(mntsdcard)uri(contentmediaexternal

android学习笔记文件路径 (mntsdcard)uri(contentmediaexternal)学习 一、URI 通用资源标志符(Universal Resource Identifier, 简称"URI")。 Uri代表要操作的数据,Android上可用的每种资源- 图像、视频片段等都可以用Uri来表示。 URI一般由三部分组成: 访问资源的命名机制。 存放资源的主机名。 资源自身的名称,由路径表示。 Android的Uri由以下三部分组成:"content://"、数据的路径、标示ID(可选) 举些例子,如: 所有联系人的Uri:content://contacts/people 某个联系人的Uri: content://contacts/people/5 所有图片Uri: content://media/external 某个图片的Uri: content://media/external/images/media/4 二、内部保存

首先我们来看一下android是如何管理多媒体文件(音频、视频、图片)的信息。通过DDMS,我们在 /data/data/com.android.providers.media下找到数据库文件 打开external.db文件进一步查看:在media表格下,可以看到文件路径(_data)和Uri的标示ID(_id)的对应关系。 三、相互转换 1.从URI获得文件路径 1 string myImageUrl = "content://media/external/images/media/***"; 2 Uri uri = Uri.parse(myImageUrl); 3 4 5 String[] proj = { MediaStore.Images.Media.DATA }; 6 Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null); 7 int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Image

SD卡读写规范

SD操作学习笔记 操作学习笔记 标签: 笔记学习SD卡驱动2009-11-11 21:51 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 内存组织 数据读写的基本单元是一个字节,可以按要求组织成不同的块。 Block:块大小可以固定,也可以改变,允许的块大小是实际大小等信息存储 允许的块大小是实际大小等信息存储。 寄存器。 在CSD寄存器 Sector:和擦除命令相关,由几个块组成。Sector的大小对每个设备是固定的,大小信息存储在CSD寄存器。 WP Group:写保护单位。大小包括几个group,写保护由一位决定,对每个设备大小是固定的,存储在CSD寄存器。 3.5 读写操作 Single Block Mode:主机根据事先定义的长度读写一个数据块。由发送模块产生一个16位的CRC校验码,接受端根据校验码进行检验。读操作的块长度受设备sector大小(512 bytes)的限制,但是可以最小为一个字节。不对齐的访问是不允许的,每个数据块必须位于单个物理sector内。写操作的大小必须为sector大小,起始地址必须与sector边界对齐。

相关主题
文本预览
相关文档 最新文档