搜索
bottom↓
回复: 2

lpc1788 使用FATFS读写U盘 的驱动问题。

[复制链接]

出0入0汤圆

发表于 2013-11-1 14:05:40 | 显示全部楼层 |阅读模式
这是fatfs在LPC1788上的底层驱动,也就是diskio.c文件,下面只是读函数,正常情况下只需调用
                if(MS_BulkRecv(sector, count, buff) == OK)
                        return RES_OK;
                else
                        return RES_ERROR;
上面这四句就可以了,但是由于USB DMA RAM不能是0x10000000到0x10010000这个内存空间,所以只能用外设RAM或者是SDRAM,
但是在MS_BulkRecv(sector, count, buff_tmp) 这个函数中只要count大于8就会进入Host_WDHWait()函数中,且跳不出来。但count小于8就没有问题
可以正常传输。有没有哪个大神知道是怎么回事???

DRESULT disk_read (
        BYTE drv,                        /* Physical drive number */
        BYTE *buff,                        /* Pointer to the data buffer to store read data */
        DWORD sector,                /* Start sector number (LBA) */
        BYTE count                        /* Sector count (1..255) */
)
{
        BYTE *buff_tmp;                 //willow add
        DWORD sector_tmp;
        uint32_t        i;
        buff_tmp=buff;
        sector_tmp=sector;
        if(!count) return RES_PARERR;
        if(drv == 0)
        {
                if (Stat & STA_NOINIT) return RES_NOTRDY;

                //willow change         //防止接收緩沖區溢出
                if((uint32)buff<0x10010000)
                {
                        for(i=0;i<count;i++)
                        {
                                if(MS_BulkRecv(sector_tmp++, 1, UserBuffer) != OK)
                                        return RES_ERROR;
                                 memcpy(buff_tmp,(const void *)UserBuffer,512); //??
                                 buff_tmp+=512;
                        }
                        return RES_OK;
                }
                else
                {
                        while(count)
                        {
                                if(count>=8)
                                {
                                        if(MS_BulkRecv(sector, 8, buff_tmp) == OK)
                                        {
                                                count-=8;
                                                buff_tmp+=4096;//        (8*512)
                                        }
                                        else
                                                return RES_ERROR;
                                }
                                else
                                {
                                        if(MS_BulkRecv(sector, count, buff_tmp) == OK)
                                                return RES_OK;
                                        else
                                                return RES_ERROR;
                                }
                        }
                        return RES_OK;
                }
        }

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-11-4 17:59:39 | 显示全部楼层
看来是没人知道

出0入0汤圆

发表于 2014-4-15 17:05:33 | 显示全部楼层
高手都去哪呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 05:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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