• 8
  • 3月

迷糊,犯错,居然外发的软件少打包了一个文件!还好不是太严重。吸取教训,坚决杜绝这类错误!

  • 7
  • 3月

做SD/MMC卡驱动的项目也有大半年了,总觉得该总结些什么了。在这里,主要就是记录一些比较常见的问题及解决方法,以免再一次遇到。

首先就是SD/MMC卡的初始化错误问题。在找错误之前,先确认:1.用读卡器确认这张SD卡是否损坏;2.用另一套环境(一样的程序)读取同一张卡,是否正常;3.用相同的环境读取另外一张SD卡是否正常。如果是1,那么就直接退出本文章了;如果是2,那么就是该环境上出现虚焊短路或芯片损坏,问题也比较好办;如果是3,那么就说明程序和环境问题不大,可能是一些细节上的问题,可以参考以下内容的其中一部分;如果都不是,那么就要开始排查了。

寻找这类错误的原因,首先要检查的就是硬件。我想,第一步,我会确认原理图,看IO的连接是否正确,用万用表确认IO没有虚焊、短路。接下来,用示波器(如果没有,只能用万用表了),测量SD卡座的电源脚。一般来说,电压值应该在3.3V左右,如果相差过大,可能就是电路错误,或者LDO的供电能力不足了。

如果确认完以上两步,那么,硬件方面问题就不大了。接下来要确认的是固件上驱动程序的问题了。一般来说,如果这时候有个逻辑分析仪,那么问题就简化了。如果没有,只能按经验来一步一步排查了。首先要检查的是上电顺序,还记得在血的教训一文中提到这个问题。简单地说,就是先开电,再上拉。上电OK了?那么就看看初始化程序了。确认刚上电时的时序控制在100KHz到400KHz之间(一般采用240KHz左右,这里最好能用示波器确认),在发送第一条命令之前,确认主机已经发送足够的时钟(好像是74个时钟以上)。

然后,正式进入初始化程序。这里需要说一下SD/MMC卡的区分,浅谈SD卡和MMC卡的异同一文中也稍微讲了下这些。一般来说刚上电时,SD卡不支持CMD1而支持CMD55,MMC卡不支持CMD55而支持CMD1,这样就可以区分这两种卡。然后SD1.1和SD2.0卡主要通过CMD8来区分,总之,就是按照SPEC上的要求了。还要注意的是:上电时CMD55的参数为全0,ACMD41在SD1.1和SD2.0上的参数会有所不同。发送CMD0的时候,注意IO口电平,以防误入SD卡的SPI模式。

到了这一步,如果能够激活成功,后面的问题也就不大了。具体问题还需要具体分析。

就先简单记到这了。

  • 4
  • 3月

在使用电脑的过程中,为了安全起见,我们通常需要关闭自动播放。当然,有时为了某些用途,我们又需要打开自动播放。其实自动播放的开关也就几处,当然,本文只是Hanny在网上查找,并经过实验的一个总结,并不能覆盖所有情况。

第一种关闭自动播放的方法是组策略法,是Hanny认为最好,也是最简单的方法。开始 - 运行 - gpedit.msc,进入组策略管理器。选择 计算机配置 - 管理模板 - 系统 项,在右边找到“关闭自动播放”项,设置成为 已启用 即可。如果需要开启自动播放功能,则将该项改为 未配置 或 已禁用即可。

第二种是注册表法。开始 - 运行 - regedit,进入注册表编辑器。选择 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Cdrom 目录。将AutoRun项的值改为0即可。当然,本方法如目录名所示,仅对Cdrom有效。改回1则重新开启本功能。

第三种是注册表禁止驱动器法。开始 - 运行 - regedit,进入注册表编辑器。选择 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Exploer 目录,修改NoDriveTypeAutoRun项的值即可(如果没有该项,则建立该项)。该项共有8位。这8位表示以下8种设备:

01: DKIVE_UNKNOWN 0101h不能识别的设备类型 02: DRIVE_NO_ROOT_DIR 1002h 没有根目录的驱动器(Drive without root directory) 04: DRIVE_REMOVABLE2104h可移动驱动器(Removable drive) 08: DRIVE_FIXED3008h 固定的驱动器(Fixed drive) 10: DRIVE_REMOTE 4110h网络驱动器(Network drive) 20: DRIVE_CDROM5020h光驱(CD-ROM) 40: DRIVE_RAMDISK 6040h RAM磁盘(RAM Disk) 80: 保留

这些位为0时,表示允许该种类的驱动器的自动运行特性,为1时,表示禁止该种类驱动器的自动运行特性。FF表示全部禁止,00表示全部允许,系统默认值为95表示禁止80 10 04 01这四种类型

第四种是注册表禁止盘符法。开始 - 运行 - regedit,进入注册表编辑器。还是选择 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Exploer 目录,修改NoDriveAutoRun项的值即可(如果没有该项,则建立该项)。
该值项的低26位分别代表从A到Z共26个驱动器的自动播放功能。如果该位为1,表示该位对应的驱动器的自动播放功能被禁止,如果该位为0,则该位对应的驱动器的自动播放功能被允许。例如我们只想禁止驱动器C和D的自动播放功能,对于其他驱动器的自动播放功能则想保留,那么我们需要修改NoDriveAutoRun的值为0x0000000c。

第五种是注册表挂载权限法。开始 - 运行 - regedit,进入注册表编辑器。选择 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Exploer \ MountPoints2 目录,右键点击MountPoints2,选择“权限”,在“组或用户名称”里依次选择,然后在下面的权限框里把完全控制“拒绝”,全部组或者用户设置完毕,“确定”完成。

以上五种方法,只是一个初步总结,每种方法均可逆。但是,在测试过程中,有部份机子对上述的某些方法不起作用。在目前测试的机子中,只有第一种和第五种对所有的电脑都有效果。

  • 14
  • 2月

今天,大年初一了。

过元旦的时候,还在安慰着自己,年还没过,还不能算2010年。但是现在,2010年真的过了。

每一次一到一年的结束,总想着后悔过去的一年如何虚度,然后又扬扬洒洒地罗列出新的一年计划。再到年底,发现计划未完成,然后再重复着以上的动作。

我想,现在也不去懊悔过去的一年了。过去的一年,简单的说就是,没有什么大作为,但是也不能说没有任何收获。至少,在公司,从头到尾地完成了一个项目。

那么今年,有何计划呢?我想不管2010年年底会不会完成,至少现在先列好了。至少在迷惘的时候,看一下,让自己明白自己还有什么事情该做而又未做。

首先,要确定自己该精通的一个方向了。因为根据目前的情况来看,应该在未来的10年都会从事写程序方面的工作。之前的时间,也泛泛地接触了蛮多的,现在,是时候要明确自己的方向了。

然后,也是时间提高一下英语水平了。咱别的先不说,就从背单词开始吧。至少,把高中之前的单词过一遍总该行吧,把四级的单词过一遍总该行吧。至于六级的单词,就看情况再说了。唉,英语!

再接着就是一项长期的计划了。等梅雨季节过了,还是要坚持跑步。身体不行,一切的计划都是扯淡。

暂时就这些了吧。今天,除了春节,什么节都不是!

2010年,虎年,本命年。

  • 6
  • 2月

啥都不说了。明天回家。初八上班。