安全数码卡, 它是在 MMC 的基础上发展而来, 是一种基于半导体快闪记忆器的新一代记忆设备。按容量分类,可以将SD 卡分为 3 类: SD 卡、 SDHC 卡、 SDXC 卡。SD卡(SDSC):0~2G SDHC卡:2~32G SDXC卡:32G~2T
名称 | 宽度 | 描述 |
---|---|---|
CID | 128 | 卡识别寄存器 |
CSD | 128 | 卡描述数据寄存器:卡操作条件相关的信息数据。 |
OCR | 32 | 操作条件寄存器 |
RCA | 16 | 相对卡地址寄存器:本地系统中卡的地址,动态变化,在卡的初始化时确定。(SPI模式中没有) |
SCR | 64 | SD配置寄存器:SD卡特定信息数据 |
#include "mmc_sd.h"
uint8_t SD_Type = 0;//SD卡的类型
uint32_t Capacity = 0; //可用扇区数
移植修改区///
//SPI初始化
void hal_spi_init(void)
{
}
/*****************************************************************************
** 描 述:写入一个字节
** 入 参:Dat:待写入的数据
** 返回值:读出的数据
******************************************************************************/
uint8_t SD_SPI_ReadWriteByte(uint8_t Dat)
{
/**
根据不同平台进行实现
****/
}
//取消选择,释放SPI总线
void SD_DisSelect(void)
{
SD_CS_HIGH_HRS();
SD_SPI_ReadWriteByte(0xff);//提供额外的8个时钟
}
//选择sd卡,并且等待卡准备OK
//返回值:0,成功;1,失败;
uint8_t SD_Select(void)
{
SD_CS_LOW_HRS();
if(SD_WaitReady()==0)return 0;//等待成功
SD_DisSelect();
return 1;//等待失败
}
///
//等待卡准备好
//返回值:0,准备好了;其他,错误代码
uint8_t SD_WaitReady(void)
{
uint32_t t=0;
do
{
if(SD_SPI_ReadWriteByte(0XFF)==0XFF)return 0;//OK
t++;
}
while(t<0XFFFFFF); //等待
return 1;
}
//等待SD卡回应
//Response:要得到的回应值
//返回值:0,成功得到了该回应值
// 其他,得到回应值失败
uint8_t SD_GetResponse(uint8_t Response)
{
uint16_t Count=0xFFF;//等待次数
while ((SD_SPI_ReadWriteByte(0XFF)!=Response)&&Count)Count--;//等待得到准确的回应
if (Count==0)return MSD_RESPONSE_FAILURE;//得到回应失败
else return MSD_RESPONSE_NO_ERROR;//正确回应
}
//从sd卡读取一个数据包的内容
//buf:数据缓存区
//len:要读取的数据长度.
//返回值:0,成功;其他,失败;
uint8_t SD_RecvData(uint8_t*buf,uint16_t len)
{
if(SD_GetResponse(0xFE))return 1;//等待SD卡发回数据起始令牌0xFE
while(len--)//开始接收数据
{
*buf=SD_SPI_ReadWriteByte(0xFF);
buf++;
}
//下面是2个伪CRC(dummy CRC)
SD_SPI_ReadWriteByte(0xFF);
SD_SPI_ReadWriteByte(0xFF);
return 0;//读取成功
}
//向sd卡写入一个数据包的内容 512字节
//buf:数据缓存区
//cmd:指令
//返回值:0,成功;其他,失败;
uint8_t SD_SendBlock(uint8_t*buf,uint8_t cmd)
{
uint16_t t;
if(SD_WaitReady())return 1;//等待准备失效
SD_SPI_ReadWriteByte(cmd);
if(cmd!=0XFD)//不是结束指令
{
for(t=0; t<512; t++)SD_SPI_ReadWriteByte(buf[t]); //提高速度,减少函数传参时间
SD_SPI_ReadWriteByte(0xFF);//忽略crc
SD_SPI_ReadWriteByte(0xFF);
t=SD_SPI_ReadWriteByte(0xFF);//接收响应
if((t&0x1F)!=0x05)return 2;
文章浏览阅读977次,点赞2次,收藏3次。TP(真阳性 true positives)TN(真阴性 true negatives) FP(假阳性 false positives) FN(假阴性 false negatives)混淆矩阵:图一_auc metric
文章浏览阅读446次。一、引言最近在做vue项目后,需要执行一个 npm install 的命令来安装项目所需要的依赖文件,但是报错了:I’m all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.npm ERR! ..._npm install zlib: unexpected end of file
文章浏览阅读480次。266b9d49bfa3d2d16b4111378b1f9794373ee141The Go Annotated SpecificationThis document supersedes all previous Go spec attempts. The intentis to make this a reference for syntax and semantics. ..._京器晴bfa49d
文章浏览阅读1.6w次,点赞50次,收藏361次。第二讲 初识SLAM传感器 Sensors两类传感器:安装于环境中的:二维码,GPS,携带于机器人本体的:对比激光和相机两大类传感器,激光建图基本上已经研究清楚,视觉SLAM还没有稳定可靠运行摄像头:轻便、便宜、信息丰富缺点:遮挡、受光照影响、计算量大、单目,双目,深度相机(TOF/结构光)..._视觉slam十四讲ppt
文章浏览阅读3.9k次,点赞2次,收藏11次。@Entity注释指名这是一个实体Bean,@Table注释指定了Entity所要映射带数据库表,其中@Table.name()用来指定映射表的表名。如果缺省@Table注释,系统默认采用类名作为映射表的表名。实体Bean的每个实例代表数据表中的一行数据,行中的一列对应实例中的一个属性。@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:1)name:映射的列名。如..._"@entity @table( name = \"wcs_robot_configuration\" )"
文章浏览阅读1.6k次。Linux分区实践_emmc 启动,怎么查看内核文件系统的分区大小
文章浏览阅读455次,点赞8次,收藏5次。# 获取分隔符 将分隔符 替换 未空格 扩容 N倍。## 整个字符长度 减去 最后一个字段长度。##截取后N长度的字符,_excel根据分割取最后一个
文章浏览阅读7.6k次。snmp 中进行流量统计的MIB变量ifInOctets and ifOutOctets 溢出问题 在MRTG中进行流量统计是通过采集ifInOctets and ifOutOctets ,等过一段时间再采集这两个值,然后进行相减就得出这一段时间的平均流量,如果这个数出现溢出就会出现问题。 snmp 中进行流量统计的MIB变量ifInOctets and ifOutOctet_if out octets
文章浏览阅读3.1k次。本人遇到的问题只针对极个别的需要的朋友,这种情况比较少见。先说下,触发情况,post请求,application/x-www-form-urlencoded格式。第一,参数是否需要urlencode,例如:string name="张三";var newname=HttpUtility.UrlEncode(name);string body=$"key={newname}";..._httpwebresponse response = request.getresponse() as httpwebresponse,操作超时
文章浏览阅读2.6k次。原标题:北京高校合并历史,仅存一所本科“联合大学”的诞生提起“联合大学”,大家的第一反应是高校重组和赫赫有名的西南联合大学。除西南联大外,国内还有这么6所大学曾使用过“联合大学”之名,而如今以“联合大学”命名的只剩北京一所。北京联合大学1985年开始组建,名字的由来是因为期初由十五所分院联合组建而成。今天小编为您梳理20世纪90年代以来,特别是在2000年前后北京市高校在高校重组、合并浪潮中的变化..._北京计算机学院 更名为
文章浏览阅读1.1k次。作者:刘凯_7013https://www.jianshu.com/p/5d764b52ea88code review 的目的是提高代码质量,减少开发bug,俗话说,三人行必有我师,众人拾柴火焰高。gitlab提供了code review机制,对基于gitlab的code review,直接以具体例子的形式做个实践总结。gitlab提供了两种代码merge机制:1)在本地将源分支(Source branch)代码合并到目标分支(Target branch),然后Push到目标分支(Target._git的approvers
文章浏览阅读799次。——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——反射与动态代理一、类加载器 我们已经知道一个Java程序是由很多的类,以及这些类的对象组成的,因为类是创建对象的模板,所以当某个Java程序中需要使用某个类,那么JVM就会将该类加载到内存,并为之创建一个Class类的对象。 注意:Java中每一个类或接口都会有一个对应的Class类的对象,该对象用于描述所有类共_有三个类student,teacher,worker