zoukankan      html  css  js  c++  java
  • wince5+2440如何支持SDHC?

    先来看看SDHC定义:

    SDHC是"Secure Digital High Capacity“的缩写,即“高容量SD存储卡”。2006年5月SD协会发布了最新版的SD 2.0的系统规范,在其中规定SDHC是符合新的规范、且容量大于2GB小于等于32GB的SD卡。(引自百度百科)

    方法主要参考gooogleman的博客文章:http://blog.csdn.net/gooogleman/archive/2009/05/07/4154020.aspx

    1、更新pb。(这步没做,我的pb已经打了08、09年的补丁了)

    2、在platform->setting->environment 中设置IMGSDBUS2 = 1

        之所以要设置这个环境变量是因为sdbus2.dll 才支持大容量的SD的。

    在common.bib中 

    #if defined IMGSDBUS2 
    ; @CESYSGEN IF CE_MODULES_SDBUS2 
      sdbus.dll      $(_FLATRELEASEDIR)\sdbus2.dll                NK  SH 
    ; @CESYSGEN ENDIF CE_MODULES_SDBUS2 
    #else 
    ; @CESYSGEN IF CE_MODULES_SDBUS 
      sdbus.dll      $(_FLATRELEASEDIR)\sdbus.dll                  NK  SH 
    ; @CESYSGEN ENDIF CE_MODULES_SDBUS 
    #endif

    3、修改BSP下的代码(蓝色为添加部分

    (1)SendCommand(UINT16 Cmd, UINT32 Arg, UINT16 respType, BOOL bDataTransfer)函数: 

        case ResponseR1:                // Short response required
        case ResponseR1b:
        case ResponseR3:
        case ResponseR4:
        case ResponseR5:                
        case ResponseR6:   
        case ResponseR7: 
            DEBUGMSG (SDHC_RESPONSE_ZONE,(TEXT("sendSDICommand short response required\r\n")));
    //      vm_pSDIReg->SDICCON = uiNewCmdRegVal | WAIT_FOR_RESPONSE | START_COMMAND | COMMAND_START_BIT | (Cmd & MAX_CMD_VALUE);
            vm_pSDIReg->SDICCON = WAIT_FOR_RESPONSE | START_COMMAND | COMMAND_START_BIT | (Cmd & MAX_CMD_VALUE);
            break;

    case ResponseR1:                // Short response required    

    case ResponseR1b:    

    case ResponseR3:    

    case ResponseR4:    

    case ResponseR5:                    

    case ResponseR6:       

    case ResponseR7:         

    DEBUGMSG (SDHC_RESPONSE_ZONE,(TEXT("sendSDICommand short response required\r\n")));

    //vm_pSDIReg->SDICCON = uiNewCmdRegVal | WAIT_FOR_RESPONSE | START_COMMAND | COMMAND_START_BIT | (Cmd & MAX_CMD_VALUE);        vm_pSDIReg->SDICCON = WAIT_FOR_RESPONSE | START_COMMAND | COMMAND_START_BIT | (Cmd & MAX_CMD_VALUE);        

    break;

    (2)函数GetCommandResponse(PSD_BUS_REQUEST pRequest)中:

            case ResponseR5:                

            case ResponseR6:

                //--- SHORT RESPONSE (48 bits total)--- 

                // Format: { START_BIT(1) | TRANSMISSION_BIT(1) | COMMAND_INDEX(6) | RCA(16) | CARD_STATUS(16) | CRC7(7) | END_BIT(1) }

                //

                *(respBuff    ) = (BYTE)(START_BIT | TRANSMISSION_BIT | pRequest->CommandCode);

                *(respBuff + 1) = (BYTE)(vm_pSDIReg->SDIRSP0      );

                *(respBuff + 2) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 8 );

                *(respBuff + 3) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 16);

                *(respBuff + 4) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 24);

                *(respBuff + 5) = (BYTE)(vm_pSDIReg->SDIRSP1 >> 24);   

                break;

    case ResponseR7:

    //--- SHORT RESPONSE (48 bits total)--- 

    // Format: { START_BIT(1) | TRANSMISSION_BIT(1) | COMMAND_INDEX(6) | CARD_STATUS(32) | CRC7(7) | END_BIT(1) }

    // NOTE: START_BIT and TRANSMISSION_BIT = 0, END_BIT = 1  

    *(respBuff ) = (BYTE)(START_BIT | TRANSMISSION_BIT | pRequest->CommandCode);

    *(respBuff + 1) = (BYTE)(vm_pSDIReg->SDIRSP0 );

    *(respBuff + 2) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 8 );

    *(respBuff + 3) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 16);

     *(respBuff + 4) = (BYTE)(vm_pSDIReg->SDIRSP0 >> 24);

    *(respBuff + 5) = (BYTE)(END_RESERVED | END_BIT);

     break;

         主要是要添加对cmd8的支持。

    4、重新sysgen整个工程即可。

    好像不是很复杂,可是开始按此步骤执行完后,插入4G卡就是无法识别。仔细检查后发现ce.bib文件中仍有这么一行:

    sdbus.dll      E:\WINCE500\PBWorkspaces\JEJA01\RelDir\SMDK2440A_Paul_ARMV4I_Release\sdbus.dll                  NK  SH

    看来设置的环境变量对common.bib没起作用!索性把common.bib中的

    sdbus.dll      $(_FLATRELEASEDIR)\sdbus.dll                  NK  SH 

    改为

    sdbus.dll      $(_FLATRELEASEDIR)\sdbus2.dll                  NK  SH 

    重新make run-time image, 结果就成功了! :)

    另:

    为啥设置的环境变量没起作用呢?无意中看到一篇文章:空格带来的郁闷---让Pxa270支持大容量SD卡

    果然发现IMGSDBUS2后面有一个空格,汗!

     

  • 相关阅读:
    Vue自定义指令 directive
    Vue过滤器 filters
    贪心
    家庭作业
    线段
    数列极差
    shell
    智力大冲浪
    加工生产调度
    喷水装置
  • 原文地址:https://www.cnblogs.com/dahai/p/1779002.html
Copyright © 2011-2022 走看看