因仑“3+1”工程特种兵精英论坛

标题: cf卡基本操作不敢独享,拿出来和大家交流一下 [打印本页]

作者: 因为思念谁    时间: 2016-4-11 21:31
标题: cf卡基本操作不敢独享,拿出来和大家交流一下
[size=13.3333px]首先show出我的实验板(ATmega8515):









[size=13.3333px]下面给出我的CF卡连接原理图:







[size=13.3333px]其中信号CFCEn是由一片74VHCT138选出的,在我的实验板中,选中的地址是8000-8FFF。





[size=13.3333px]下面两个是我研究时参考的文档,其中一个是CF卡官方Datasheet,一个是TrueIDE方式访问CF卡的应用文档:



[size=13.3333px]点击此处打开armok0137124.pdf

[size=13.3333px]点击此处打开armok0137125.pdf





[size=13.3333px]然后是具体操作过程(这里使用了我自编的COM Monitor和AVR程序,利用类似Debug的命令在PC端进行调试):







[size=13.3333px]sre 1 : 表示使用外部SRAM

[size=13.3333px]wr 8100 01 : 把0x01写到地址0x8100,按照上面的原理图连接的话,地址0x8100是CF卡的Feature Register(特性寄存器),写0x01表示使用8位方式传输数据,具体见Datasheet

[size=13.3333px]wr 8700 ef : 地址0x8700写入时表示命令寄存器,命令0xef功能是设置CF卡的Feature,具体见Datasheet

[size=13.3333px]rd 8100 : 读取地址0x8100,地址0x8100在读取时为错误代码寄存器,如果读得0表示命令成功

[size=13.3333px]wr 8200 01 : 地址0x8200表示每次操作的扇区数目,在这里,每次操作一个扇区

[size=13.3333px]wr 8300 01 : 地址0x8300表示扇区号,这里我访问的是1号扇区

[size=13.3333px]wr 8400 10 : 地址0x8400为柱面号低位,这里我访问的是16号柱面(0x10)

[size=13.3333px]wr 8500 00 : 柱面号高位

[size=13.3333px]wr 8600 a0 : 地址0x8600低4位为磁头号,这里我访问0号磁头,高4位用来表示驱动器特性,这里高4位为1010表示CF卡是主盘(Master),采用磁头/柱面/扇区方式访问(除此以外可以选择LBA方式访问),具体见Datasheet

[size=13.3333px]wr 8700 20 : 执行指令0x20,即读扇区指令

[size=13.3333px]rd 8100 : 读错误代码寄存器

[size=13.3333px]rd 8700 : 地址0x8700在读取时为状态寄存器,这里读得58表示CF卡已经Ready,且需要Data Request,具体见Datasheet





[size=13.3333px]设置好访问的位置和指令后,就可以访问数据寄存器0x8000来获得数据了。这里读取0x8000-0x80ff的数据,就是扇区的前256字节(其实访问0x8000-0x80ff就是访问256次0x8000,理解了原理图的话就会知道)。









[size=13.3333px]然后再来一次读取0x8000-0x80ff,得到扇区的后256字节。整个扇区全部读出。









欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4