63

帖子

0

TA的资源

一粒金砂(初级)

61
 
SD卡是不支持多分区,即,只有一个分区,DPT中只有一个分区的信息。这样的话,用WinHex打开,看到的第0扇区就是DBR。。。可以这样理解吧?

回复

79

帖子

0

TA的资源

一粒金砂(初级)

62
 
引用 59 楼 seemknow 的回复:
格式化后的SD卡,用physical打开,start sectors就看到MBR。用logical打开,boot sector是DBR。未分区的是啥格式,那个RAW吗?没留意过

两种方式打开后,我以前都试过。。。看到的是一样的0x数据,唯一不同的是:用logical打开时,“访问目录”下没有分区\分区表及分区表模块选项。。。
访问\分区表(模块):显示Master boot Record,其中就有“Master bootstrap loader code”,不过,其中的数值还是DBR的标准开头“EB 58 90 ”。。。。

我在一篇论文看到这样的话:SD卡是不支持多分区,即,只有一个分区,DPT中只有一个分区的信息。第0扇区就是DBR。。。
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

63
 
SD卡的MBR不在SD上,而是在PC的boot里面,所以,用WinHex看不到了。。。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

64
 
学习,顶
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

65
 
每次都是地发送CMD17命令时,就无法往下执行:
RETAILMSG(DEBUG_SD, (TEXT("Before WaitForSingleObject DMACIntTCStatus0=0x%8x\r\n"),(DWORD)vm_pDMAreg->DMACIntTCStatus));      
  if(WaitForSingleObject(m_hDMAInterruptEvent, INFINITE) != WAIT_OBJECT_0)
    {
    RETAILMSG(DEBUG_SD, (TEXT("__IST__BADLUCK_TransferIstThread(): Wait for DMA Interrupt Failed!\n")));
     Stop_SDIO_DMA_Channel();
     status = SD_API_STATUS_DATA_TIMEOUT;
      goto TRANSFER_DONE;
    }
RETAILMSG(DEBUG_SD, (TEXT("After WaitForSingleObject DMACIntTCStatus0=0x%8x\r\n"),(DWORD)vm_pDMAreg->DMACIntTCStatus));      
     InterruptDone(m_dwDMASysIntr);
RETAILMSG(DEBUG_SD, (TEXT("OK OK OK we pass the DMA Intr\r\n")));  

Before WaitForSingleObject DMACIntTCStatus0打出来了。。。
但时,After WaitForSingleObject DMACIntTCStatus0没有。。。
__IST__BADLUCK_TransferIstThread也没打出来。。。
直接跑到BusRequestHandler函数中:
打出---FiveHandler---BusRequestHandler ends
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

66
 
DMA那部分,我改成扫描模式后,CMD17会发送两次,不过,打出来的数据大部分是0。。。
DMA中断模式:
if(WaitForSingleObject(m_hDMAInterruptEvent, INFINITE) != WAIT_OBJECT_0)
{
  RETAILMSG(DEBUG_SD, (TEXT("__IST__BADLUCK_TransferIstThread(): Wait for DMA Interrupt Failed!\n")));
   Stop_SDIO_DMA_Channel();
   status = SD_API_STATUS_DATA_TIMEOUT;
   goto TRANSFER_DONE;
  }
RETAILMSG(DEBUG_SD, (TEXT("After WaitForSingleObject DMACIntTCStatus0=0x%8x\r\n"),(DWORD)vm_pDMAreg->DMACIntTCStatus));      
InterruptDone(m_dwDMASysIntr);
DMA的扫描模式:
temp =(vm_pSDIReg->SD_RINTSTS) & 0x8;  //transmit FIFO data request
                while( temp != 0x8)
                {
                          RETAILMSG(DEBUG_SD, (TEXT("~~~~~~~~Here wait for data transfer over, SD_STATUS=0x%8x\r\n"),(DWORD)vm_pSDIReg->SD_STATUS));      
                        RETAILMSG(DEBUG_SD, (TEXT("I am waiting,SD_RINTSTS=0x%x \n"),(UINT32)( vm_pSDIReg->SD_RINTSTS)));
                        temp =( vm_pSDIReg->SD_RINTSTS) & 0x8;
                }

             RETAILMSG(DEBUG_SD, (TEXT("~~~~~~~~After data transfer over, SD_STATUS=0x%8x\r\n"),(DWORD)vm_pSDIReg->SD_STATUS));      
               
            if(m_bDriverShutdown)
            {
                Stop_SDIO_DMA_Channel();
                RETAILMSG(DEBUG_SD, (TEXT("__IST___TransferIstThread_TransferIstThread(): Thread Exiting\n")));
                return FALSE;
            }
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

67
 
引用 28 楼 gsymichael 的回复:
传输有问题并不一定是控制器有问题,也有可能你的连线不合适。硬件部分我不是很了解,没有建议。
只有512M我估计是在获取TotalSectorNumber的时候出错。但是不是很确定。
你可以在SDmemory部分把DISK_INFO的di_total_sectors成员打出来看看是多少,乘上512就是容量大小了。

在内存管理器中的容量问题已经解决了,我现在用的是2G的SD卡,能正常显示容量是1.83G,扇区512B
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

68
 
还是你寄存器配置的问题
好好看一下芯片验证人员的小pattern吧
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

69
 
引用 67 楼 guopeixin 的回复:
还是你寄存器配置的问题
好好看一下芯片验证人员的小pattern吧

你说的是验证人员在无系统下测试SD的测试程序吗?
现在是可能确实发送CMD17命令时,DBR发送错误。

有人认为:在SD初始化时,没有清DMAbuffer,不过,一开始设置DMAbuffer时,代码如下(应该是保证buffer为空了吧):
    DMA_ADAPTER_OBJECT dmaAdapter;
    dmaAdapter.ObjectSize = sizeof(dmaAdapter);
    dmaAdapter.InterfaceType = Internal;
    dmaAdapter.BusNumber = 0;
    m_pDMABuffer = (PBYTE)HalAllocateCommonBuffer( &dmaAdapter, MAXIMUM_DMA_TRANSFER_SIZE, &m_pDMABufferPhys, FALSE );
    if( m_pDMABuffer == NULL )
    {
         RETAILMSG(DEBUG_SD, (TEXT("***SHCDriver: - Unable to allocate memory for DMA buffers!\r\n")));
         status = SD_API_STATUS_INSUFFICIENT_RESOURCES;
         goto INIT_ERROR;
     }
CMD17时发送的数据和ACMD51时,是一样,从这情况来看,应该是每个用buffer之前都得清一次0,而不是在SD初始化时清0,是这样的吗?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

70
 
引用 68 楼 liuysheng 的回复:
引用 67 楼 guopeixin 的回复:
还是你寄存器配置的问题
好好看一下芯片验证人员的小pattern吧

你说的是验证人员在无系统下测试SD的测试程序吗?
现在是可能确实发送CMD17命令时,DBR发送错误。

有人认为:在SD初始化时,没有清DMAbuffer,不过,一开始设置DMAbuffer时,代码如下(应该是保证buffer为空了吧):
? ? DMA_ADAPTER_OBJECT dmaAdapter;
? ? dmaAdapter.ObjectSize = sizeof(dmaAdapter);
? ? dmaAdapter.InterfaceType = Internal;
? ? dmaAdapter.BusNumber = 0;
? ? m_pDMABuffer = (PBYTE)HalAllocateCommonBuffer( &dmaAdapter, MAXIMUM_DMA_TRANSFER_SIZE, &m_pDMABufferPhys, FALSE );
? ? if( m_pDMABuffer == NULL )
? ? {
? ? ? ? RETAILMSG(DEBUG_SD, (TEXT("***SHCDriver: - Unable to allocate memory for DMA buffers!\r\n")));
? ? ? ? status = SD_API_STATUS_INSUFFICIENT_RESOURCES;
? ? ? ? goto INIT_ERROR;
? ? }
CMD17时发送的数据和ACMD51时,是一样,从这情况来看,应该是每个用buffer之前都得清一次0,而不是在SD初始化时清0,是这样的吗?

不用考虑dbr的问题,也不用考虑清dma buffer的问题。
dump sd寄存器的值和验证人员一块检查一下就好了
恭喜你基本上已经找到问题根源了,呵呵
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

71
 
guopeixin大哥,现在这样的情况,与问题解决,可能还早呢。。。呵呵!
DMA能传数据,是不是说明DMA配置是没问题了。。。?

DBR是从SD到DMAbuffer,再到内存,我现在打印的信息时,是从DMAbuffer到内存时的,会不会出现如下问题:问题出在从SD到DMAbuffer,或者每次要用DMA时,压根就没有启动DMA传数据,所以,每次读的数据就不对了。。。?
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

72
 
弄了这么久,问题终于有了确定的定位:发CMD17命令时,DMA压根就没启动,DBR一个字节都没传到DMAbuffer中来,怎么回事?DMA配置没问题的,因为在stepldr中也是这么配置的,eboot能正常启动,说明DMA是可以搬运数据的。。。

有关DMA的问题,麻烦解答一下:
数据从SD到DMAbuffer,再由DMAbuffer到内存,
问题:DMA的使能是在前过程之前(这点应该是这样的),DMA的关闭是两个过程之间,是这样吗?
致谢!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

73
 
学习, 帮顶..
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

74
 
帮顶
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

75
 
12月济南招聘会,济南12月招聘会,济南12月招聘会信息,济南招聘会,山东省12月济南招聘会,济南大型招聘会

2009年12月山东济南大中专毕业生供需见面会
—冬季十七城市大型人才集中招聘月
山东欣荣人才服务有限公司常年在山东济南组织大型招聘会,自07年以来共举办了数十场大型人才招聘会,已成为济南市最具规模、人气最旺的现场招聘会之一,取得了广大用人企业和求职者的一致好评。现正值09年招聘的最佳季节,为满足广大用人企业求才,并促进就业的需求,特推出集中招聘月:
2009年12月济南招聘会
第一场:12月19日(周六8:00—14:00)综合类
地点:山东省科技馆(泉城广场东邻)
2009年12月济南招聘会
第二场:12月26日(周六8:00—14:00)综合类
地点:山东省科技馆(泉城广场东邻)
2009年12月济南招聘会 宣传及规模
每届招聘盛会将在报纸、公交车车载电视、电视台等媒体进行长时间、全方位、多层次的宣传,同时在各大专业人才网站进行广泛推广,并将深入省内各高校进行发动宣传,组织各高校应往届毕业生及社会各类人员参会。拟邀企业200多家,预计到场人数上万人次。本届招聘会将邀请省内各类有人才需求的高新技术、集体、民营股份制企业及其他企事业单位参会,提供就业岗位5000多个。
2009年12月济南招聘会报名须知:
报名材料:企业营业执照及经办人身份证复印件、企业招聘信息(300字以内电子文档)
报名电话:(0531)82906016  传真:(0531) 87907039  Email: xinronghr@126.com
2009年12月济南招聘会咨询顾问:刘洪双 13969139981
2009年12月济南招聘会会务服务
1、        免费提供桌椅,免费制作写真海报一张(规格110cm×80 cm) ,免费为2名工作人员提供午餐和饮用水及招聘文具一套 ,工作人员可上门办理相关手续。
2、        网站服务:可免费在山东人才信息网(www.sdrencai.com)发布一个月。
3、        推荐服务:利用我们庞大的人才库信息,针对您的需求,推荐适合您企业的人才。
2009年12月济南招聘会
泉城广场(科技馆):乘1、3、5、14、19、36、44、49、66、70、80、82、85、55、101、102、106、123、K100、K96、K52路车到泉城广场下车。
2009年12月济南招聘会详情请登陆山东人才信息网(www.sdrencai.com)查询相关信息
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

76
 
学习, 帮顶..
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

77
 
学习了,好长啊
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

78
 
up
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

79
 
太 好了!
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

80
 
学习ing。

严重顶一下!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表