1、扩容原理

首先对实现扩容卡的原理做下介绍,有以下几种可能:
1、只修改了相关寄存器或其它方面的数值,使得SD卡显示容量大于实际容量,超出实际容量的地址完全无法写入数据;
2、另一种实现扩容卡的方式是,不仅从数值上改变了容量,还将超出实际容量的地址映射到备份分区,使得超出实际容量的部分数据仍旧能够正常读写;
(SD卡除了已用的物理存储空间外,还保留有一段存储空间作为备份分区,用来替换SD卡使用中产生的坏块)
3、另一种比较高级的方式是,将超出实际容量的地址重复映射到实际物理存储空间中;这样在写数据时,会动态覆盖之前写入的数据,使得超出实际容量的数据能够正常读写,但会损坏旧的数据。

2、检测原理:

SD卡很多用于智能设备存储,例如家用语音摄像头,一般在设备上格式化后会被设备写入一些其自身可识别的索引,设备检测到了自己可以认识的索引,就知道卡是可写入的,不会报格式化或初始化的提示,因此一些厂商会用这部分自己写入的索引信息检测SD卡是否为扩容卡,便于提示用户卡是否正常,下面为某厂商的网络摄像头SD卡存储内容,以此为例介绍下目前主要为三种检测方法:1、寄存器信息检测;2、索引检测;3、读写数据检测;
1、寄存器信息检测
Card Identification Register (CID)有16字节长,它包含了SD卡的唯一识别信息,标准的设计要求每张卡片的CID都不相同(之前我们有接到一例几张卡CID完全一致的现场)。这些信息是在卡的生产期间被烧录,主控制器不能修改它们的内容。

其中MID(Manufacturer ID)信息标识SD卡制造商,是由SD-3C, LLC统一进行管理分配的。比如Sandisk为0x02,Kingston为0x37,Samsung为0x15,该检测方式不会对知名大厂的产品误报。

优点:很多扩容卡、假卡厂商会直接将MID字段置为0x00,在开机、重启、插卡时,可以通过检测MID字段是否为0,来识别扩容卡、假卡。
缺点:
1、误报的可能:SD卡制造厂商比较多,可能一些小厂并未申请MID标识,将自己产品的MID信息置为0,导致产品误报;
2、漏报的可能:如果这些小厂将大厂的MID信息烧录到自己的产品中,或者随意烧写一个值,此方法将无法检测。

2、索引检测
索引检测主要是检测3个索引,partition、file_info、event_entry(分区、文件、事件索引);
a.每一个类型的数据(录像、图片)有一个索引文件(sys001.bin,sys002.bin…);
b.每个索引文件有一个partition结构体,记录当前写到哪个数据文件等信息;
c.每类数据包含多个数据文件,每个数据文件对应一个file_info索引,记录文件中事件个数、起止时间等;
d.每个文件里存储有多个事件,每个事件都对应一个event_entry索引,记录事件数据对应的偏移、长度、时间戳等信息;
索引文件就是由这三类索引结构体构成,检测的时机是在格式化的时候检查所有索引,检测方法是检查索引文件的CRC检验和,当格式化正常但中间有索引检测不通过,则显示疑似扩容卡;

注:索引是单独存在的,有单独存在的sys0x.bin文件(x为1-4,意思分别如下),256M是MP4文件;

  1. 录像数据文件(对应.mp4)
  2. 普通图片(对应.pic)
  3. 过线统计数据(对应tp00000.bin)
  4. 消息推送图片(对应.msgpic)
    有一个系统索引文件存储sysinfo,其名称为sys00.bin;2. sys0xb.bin为备份文件;

3、读写数据检测
录像数据是以MP4存储的,MP4文件具有固定的格式,通过定时检测已经录好的MP4文件的格式,判断已经存储的录像数据是否损坏,来检测SD卡是否是扩容卡。
(一个MP4文件录满切换到下一个时检测,检测MP4文件会检查对应的file_info和MP4格式的头部)
该方法肯定能最终检测出扩容卡,但可能耗时较久(而且表现是一开始插入的时候可能不提示扩容卡,而是在使用期间提示)。同时存在一个问题是,如果人为改变了录像数据文件,则可能误报。

3、SD异常判断机制

同时顺便介绍下设备判断SD卡异常,需要格式化的依据:
1、格式化过程出错;
2、sys00.bin文件不存在,或读写权限异常;
3、SD卡中sys00.bin文件存在且可读写,但文件内容异常;
4、每个数据类型有两个索引文件,如录像有sys01.bin和备份文件sys01b.bin,如果任一类型的索引文件和备份文件同时都不存在或者读写权限异常;
5、各数据类型的索引文件和其备份文件都存在,且读写权限正常,但从索引文件中读取分区信息失败,即分区信息异常;

补充:CRC检测原理
其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

SD卡--摄像头中扩容卡原理及检测机制相关推荐

  1. FreeRTOS中的任务堆栈溢出检测机制

    关注+星标公众号,不错过精彩内容 转自 | 麦克泰技术 在FreeRTOS中,每个任务都拥有自己的堆栈,该堆栈的大小由创建任务时xTaskCreate函数的函数参数所决定. 但当任务所使用的堆栈空间超 ...

  2. SD卡引脚 电路图及工作原理介绍 .

    SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡.在诸如MP3.数码相机等设备上也都采用SD卡作为其存储设备.SD卡之所以得到如此广泛的使用,是因为它价格低廉.存储容量大. ...

  3. SD卡引脚 电路图及工作原理介绍

    转自:http://blog.csdn.net/zhangyanquen/article/details/6658802 SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡. ...

  4. SD卡与SD卡座电路以及TF卡(Micro SD Card,原名Trans-flash Card(TF卡))插拔式卡座和自弹出的卡座的引脚定义详细

    Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card,由SanDisk(闪迪)公司发明,主要用于移动电话. 在Micro SD面市 ...

  5. python打卡摄像头黑屏_500行Python代码打造刷脸考勤系统 !

    需求分析 "员工刷脸考勤"系统,采用Python语言开发,可以通过摄像头添加员工面部信息,这里就涉及到两个具体的个问题,一个是应该以什么样的数据来标识每一个员工的面部信息,二是持久 ...

  6. sd卡和sdio sdhc_想买TF卡,那些标注卡上的参数看懂了么?

    想买TF卡,那些标注卡上的参数看懂了么? 虽然现在手机已经很少加tf卡了,但是很多设备都需要额外存储卡,而市面上的存储卡一堆一堆,看起来都是64G价格却差距颇大,这是为什么呢?今天就教你看懂参数买对卡 ...

  7. MX25上SD卡的插拨检测机制

    飞思卡尔开发板留有可插拨的SD卡卡槽,BSP包中提供了热插拨的检测机制.在sdhci_probe_slot函数中,gpio_sdhc_active函数初始化SD卡相关的GPIO口,包括SD卡检测脚的初 ...

  8. linux 使用了哪个存储阵列卡,Linux中RAID概述及配置实验

    Linux中RAID概述及配置实验 一.RAID磁盘阵列概述 RAID 0 (条带化存储) RAID 1(镜像存储) RAID 5 RAID 6 RAID 1+0(先做镜象,再做条带) RAID 0+ ...

  9. SIM卡交换方案的工作原理

    2021年犯罪分子增加SIM卡交换计划,从美国公众那里窃取数百万美元 联邦调查局发布此公告是为了通知移动运营商和公众,犯罪分子越来越多地使用用户身份模块(SIM)交换从法定货币和虚拟货币账户中窃取资金 ...

  10. 嵌入式中SIM卡接口电路设计

    嵌入式中SIM卡接口电路设计 1.管脚定义 2.SIM 卡接口原理图参考设计 3.原理图设计注意事项 4.PCB 设计注意事项 1.管脚定义 管脚名称 I/O 功能描述 备注 USIM1_VCC PO ...

最新文章

  1. opencl高斯源码整理
  2. 读书:儒林外史第一回
  3. 树形结构:优先级队列,堆
  4. 设置一个DIV固定在底部,并且左右固定,垂直居中
  5. 用apache的httpclient发请求和接受数据
  6. oracle数据导入sqlldr小例子
  7. 前端学习(176):列表元素
  8. Mysql安装后在服务里找不到和服务启动不起来的解决方法
  9. mfc 子窗体 按钮不触发_资深程序员用c++开发MFC银行排队叫号系统,小白看了也能学会...
  10. gitlable iphone_iPhone 12首批用户成“小白鼠”,“信号故障”躺枪者无数
  11. springmvc的作用:
  12. 序列化:protobuf原理
  13. 什么是生命?演讲原稿
  14. java中如何转换成台湾繁体,台湾繁体转换成大陆繁体的简单方法
  15. 快速实现M5311 NBIOT TCP通信
  16. java rotateright_Java Tetris旋转
  17. 解决svmtrain已被删除问题
  18. ITFriend网站内测公测感悟
  19. Kettle报错:Driver class org.gjt.mm.mysql.Driver could not be found
  20. 参数化建模类毕业论文文献有哪些?

热门文章

  1. linux串口蜂鸣器报警电路,蜂鸣器报警电路图(简单介绍两种!)
  2. 微型计算机系统教案,微型计算机硬件系统教案
  3. 2021年下半年软件设计师上午真题答案及解析(一)
  4. 屏幕录像专家V7.5注册机
  5. 虚拟机使用主机摄像头 ” usb chicony lenovo easycamera 连接失败,驱动错误“
  6. 大众点评网根据关键词和城市id返回搜索结果-爬虫源码示例
  7. 遥感计算机解释技术PPT,梅安新 遥感导论.ppt
  8. 无网络状态下显卡驱动软件安装
  9. IDEA快捷生成方法
  10. 3种方法解除RAR压缩文件的密码保护