查看: 722|回复: 0
打印 上一主题 下一主题

cf卡基本操作不敢独享,拿出来和大家交流一下

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-11 21:31:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[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字节。整个扇区全部读出。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表