打印
[ZLG-ARM]

请教周工及各位大侠关于SMART2200读写CF卡问题

[复制链接]
2240|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xkleee|  楼主 | 2008-8-15 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教周工及各位大侠关于SMART2200读写CF卡问题
用周工提供的ZLG_CF驱动接口函数实验源程序,当查找ATA设备时写设备磁头寄存器不成功,查收了一下论坛的帖子将SetDeviceHead(0xfa);改成SetDeviceHead(0xea);还是出错。请周工及各位大侠指点,谢谢!

相关帖子

沙发
armecos| | 2008-8-15 19:24 | 只看该作者

检查初始化,跳线,引脚配置等,

你可以用www.armecos.com上的CF卡测试程序检验硬件是否正确。

使用特权

评论回复
板凳
xkleee|  楼主 | 2008-8-15 19:32 | 只看该作者

re

谢谢杨大侠的指点,希望周立功公司能给点意见

使用特权

评论回复
地板
zLgArM| | 2008-8-18 11:26 | 只看该作者

re

您好!
函数SetDeviceHead(C_D_H)的参数C_D_H只能是设备磁头寄存器,以下是IDE.H中定义的设备磁头寄存器。

/*设备磁头寄存器*/
#define        ATA_DevReg_DEV0                  0x00                    /*设备为主盘    */
#define        ATA_DevReg_DEV1                  0x10                    /*设备为从盘    */
#define        ATA_DevReg_b5                       0x20                    /*保留位,为1    */
#define        ATA_DevReg_LBA                      0x40                    /*模式选择位    */
#define        ATA_DevReg_b7                       0x80                    /*保留位,为1    */

使用特权

评论回复
5
xkleee|  楼主 | 2008-9-6 18:01 | 只看该作者

re

谢谢楼上的回复,现在终于调通了,可以正常读写CF卡了,程序放在片外SRAM中运行,总线速度配置成最快,主频和外设频率都是60M的情况下,读一个扇区时间为10。24MS,速度竟然如此之慢,难道是周立功的CF卡驱动问题?不知道周工或哪位朋友有没有做过这方面的测试?

使用特权

评论回复
6
xkleee|  楼主 | 2008-9-12 21:44 | 只看该作者

RE

把周工的程序仔细看了一下,进行了修改,目前用JTAG在片外SRAM中调试,读一个扇区速度可以达到842KBIT/S,速度还是很慢,周工的代码有几处我不大理解,还请指点。
/*********************************************************************************************************
** 函数名称: SYS_PortIn
** 功能描述: 从ATA设备指定的寄存器中读出一个字的数据,有些寄存器只有一个字节数有效。
** 输   入: reg 寄存器名称
** 输   出: 读出的数据
** 全局变量:
** 调用模块: 
********************************************************************************************************/
uint16 SYS_PortIn(uint32 reg)
{
    uint16 res ;

    *(uint16* )(ATA_EN|ATA_ALE|reg) = 0; //为何此处要写0?
    res = *(uint16* )(ATA_EN|ATA_RW) ;//     注意,这时不能对该BLANK进行操作
    *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0) = 0;//为何此处要写0?

    return res;
}


/*********************************************************************************************************
** 函数名称: SYS_PortOut
** 功能描述: 向ATA设备指定的寄存器中写入一个字的数据,有些寄存器只有一个字节数有效。
** 输   入: reg 寄存器名称
** 输   出: 无
** 全局变量:
** 调用模块: 
********************************************************************************************************/
void SYS_PortOut(uint32 reg, uint16 data)
{    

    *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|reg) =0;//为何此处要写0?

    *(uint16* )(ATA_EN|ATA_RW) = data;
    *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0) = 0;//为何此处要写0?


}

使用特权

评论回复
7
xkleee|  楼主 | 2008-9-13 09:12 | 只看该作者

TO

周工,发了邮件都快两个星期了一直没有回复,论坛上的贴子也没有回复,你们的技术支持近来是不是特别的忙啊

使用特权

评论回复
8
xdream| | 2008-9-13 18:11 | 只看该作者

把程序放在内部Flash或者内部RAM中运行,速度会快一些

使用特权

评论回复
9
xkleee|  楼主 | 2008-9-14 11:20 | 只看该作者

re

但快不了多少,我需要读写CF的速度很快才行,是做视频方面的

使用特权

评论回复
10
armecos| | 2008-9-15 18:44 | 只看该作者

高速的话需要高的I/O和CPU频率,

最好好要有DMA+中断,上层的文件系统需要设计好CACHE提高命中率,要有大的缓存。

你的I/O操作还可以再优化,毕竟这个操作经常使用,能有限提高读写速度。

更多内容,详见:
《培训系列“丛书”》
www.armecos.com
-----------------------------------
More details, see:
《"Series Books" of Training》
www.armecos.com

使用特权

评论回复
11
zlgmcu| | 2008-9-16 16:46 | 只看该作者

RE:6楼:

uint16 SYS_PortIn(uint32 reg)
{
    uint16 res ;

    *(uint16* )(ATA_EN|ATA_ALE|reg) = 0; //为何此处要写0?
    res = *(uint16* )(ATA_EN|ATA_RW) ;//     注意,这时不能对该BLANK进行操作
    *(uint16* )(ATA_EN|ATA_ALE|ATA_OUT|ATA_CS1|ATA_CS0) = 0;//为何此处要写0?

    return res;
}

以上是为了锁存地址,只需要对地址操作一下就可以了,读写都可以什么内容都没关系。
程序在内存FLASH或内部RAM运行会快很多,还有就是每次读一扇区要比每次读100个扇区速度要慢很多。。

使用特权

评论回复
12
xkleee|  楼主 | 2008-9-18 14:07 | 只看该作者

re

谢谢ZLGMCU的回复

使用特权

评论回复
13
xkleee|  楼主 | 2008-10-7 08:10 | 只看该作者

re

周工,我已经将CF卡的读写程序进行了优化,程序在内部FLASH中运行时,读CF卡速度最快是1。2MB/S,好像已经无法再快了,CPU的主频,总线速度均已配置到最快。难道是电路中的一系列74IC对读卡速度影响这么大?

使用特权

评论回复
14
xkleee|  楼主 | 2008-10-7 08:22 | 只看该作者

RE

我用STC单片机的IO口模拟ATA总线,速度最快也能达到1MB/S,而用LPC2214速度才1。2MB/S,实在不些不解请各位支招

使用特权

评论回复
15
zlg_lly| | 2008-10-9 10:42 | 只看该作者

RE:xkleee

您好!
可以尝试通过以下方法要提高GPIO速度
1、使用LPC2214的快速GPIO功能;
2、提高LPC2214的系统时钟频率(LPC2214最高60MHz);
3、优化程序。

使用特权

评论回复
16
xkleee|  楼主 | 2008-10-10 11:07 | 只看该作者

谢谢

我已将部分代码用汇编来写,速度快了不少,基本达到了要求

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

62

帖子

0

粉丝