国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      讀寫sd卡的方法及裝置的制造方法

      文檔序號:10656187閱讀:246來源:國知局
      讀寫sd卡的方法及裝置的制造方法
      【專利摘要】本發(fā)明公開了一種讀寫SD卡的方法,所述讀寫SD卡的方法包括以下步驟:通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用基帶芯片的GPIO接口模擬;在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。本發(fā)明還公開了一種讀寫SD卡的裝置。本發(fā)明解決了采用了另加一個芯片的方案來實現(xiàn)SD卡的讀寫時,明顯增加了硬件成本的問題。
      【專利說明】
      讀寫SD卡的方法及裝置
      技術領域
      [0001]本發(fā)明涉及SD卡讀寫技術領域,尤其涉及一種讀寫SD卡的方法及裝置?!颈尘凹夹g】
      [0002]隨著移動通訊技術的發(fā)展,手機的發(fā)展也日新月異,為降低企業(yè)成本以及提高競爭力,企業(yè)往往會開發(fā)成本較為低廉的系統(tǒng),但成本較為低廉的系統(tǒng)則可能會導致一些功能無法實現(xiàn),如現(xiàn)有的大部分低成本系統(tǒng)沒有SPI接口只有GP10接口,而GP10接口無法實現(xiàn)與SD卡之間的通信,導致無法實現(xiàn)對SD卡的操作,例如MTK6223D系統(tǒng)。
      [0003]為解決上述SD卡的讀寫操作的問題,通常采用了另外增加一個芯片的方案來實現(xiàn) SD卡的讀寫,但該種方案明顯增加了硬件成本,導致成本較高。
      【發(fā)明內容】

      [0004]本發(fā)明的主要目的在于提供一種讀寫SD卡的方法及裝置,旨在解決采用了另加一個芯片的方案來實現(xiàn)SD卡的讀寫時,明顯增加了硬件成本的問題。
      [0005]為實現(xiàn)上述目的,本發(fā)明提供的一種讀寫SD卡的方法,所述讀寫SD卡的方法包括以下步驟:
      [0006]通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用基帶芯片的 GP10接口模擬;
      [0007]在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。
      [0008]可選地,所述對所述SD卡進行寫操作的步驟包括:
      [0009]通過所述SPI接口發(fā)送寫操作命令至所述SD卡;
      [0010]在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中;
      [0011]在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;
      [0012]繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟,直至將所述待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。
      [0013]可選地,所述將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中的步驟之后,還包括:
      [0014]接收所述SD卡的響應應答命令;
      [0015]在所述響應應答命令正確時,執(zhí)行所述將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊的步驟;
      [0016]在所述響應應答命令不正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,并繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟。
      [0017]可選地,所述對所述SD卡進行讀操作的步驟包括:[〇〇18]通過所述SPI接口發(fā)送讀操作命令至所述SD卡;
      [0019]在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù)塊;
      [0020]在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;
      [0021]繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送讀操作命令至所述SD卡的步驟,直至讀取完所述待讀取數(shù)據(jù)的所有數(shù)據(jù)塊。
      [0022]可選地,所述將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)的步驟之前,還包括:
      [0023]在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確;
      [0024]若所述校驗碼正確,則執(zhí)行所述將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊的步驟;[〇〇25]所述判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確的步驟之后,所述讀寫SD卡的方法還包括步驟:
      [0026]若所述校驗碼不正確,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù)塊,并繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟。[〇〇27]此外,為實現(xiàn)上述目的,本發(fā)明還提供一種讀寫SD卡的裝置,所述讀寫SD卡的裝置包括:[〇〇28]初始化模塊,用于通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用基帶芯片的GP10接口模擬;[〇〇29]讀寫模塊,用于在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。[〇〇3〇]可選地,所述讀寫模塊包括:[〇〇31]發(fā)送單元,用于通過所述SPI接口發(fā)送寫操作命令至所述SD卡;[〇〇32]寫入單元,用于在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD 卡中;[〇〇33]作為單元,用于在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;[〇〇34] 所述發(fā)送單元,還用于繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡,直至將所述待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。[〇〇35] 可選地,所述讀寫模塊還包括:[〇〇36]接收單元,用于接收所述SD卡的響應應答命令;
      [0037]所述作為單元,還用于在所述響應應答命令正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;
      [0038]所述發(fā)送單元,還用于在所述響應應答命令不正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡。[〇〇39] 可選地,所述讀寫模塊還包括:[〇〇4〇] 所述發(fā)送單元,還用于通過所述SPI接口發(fā)送讀操作命令至所述SD卡;[〇〇41]讀取單元,用于在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù)塊;
      [0042]所述作為單元,還用于在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;[〇〇43] 所述發(fā)送單元,還用于繼續(xù)通過所述SPI接口發(fā)送讀操作命令至所述SD卡,直至讀取完所述待讀取數(shù)據(jù)的所有數(shù)據(jù)塊。
      [0044]可選地,所述讀寫模塊還包括:
      [0045]判斷單元,用于在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確;
      [0046]所述作為單元,還用于若所述校驗碼正確,則將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;
      [0047]所述發(fā)送單元,還用于若所述校驗碼不正確,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡。[〇〇48]本發(fā)明將終端基帶芯片的GP10接口模擬為SPI接口,并通過模擬的SPI接口對所述 SD卡進行初始化,在所述SD卡完成初始化后,通過模擬的SPI接口對SD卡進行讀寫操作,僅需要通過軟件程序實現(xiàn),而不需要增加額外的硬件芯片,降低了硬件成本。【附圖說明】
      [0049]圖1為本發(fā)明讀寫SD卡的方法的第一實施例的流程示意圖;
      [0050]圖2為本發(fā)明讀寫SD卡的方法的第二實施例的流程示意圖;[〇〇511圖3為本發(fā)明讀寫SD卡的方法的第三實施例的流程示意圖;[〇〇52]圖4為本發(fā)明讀寫SD卡的方法的第四實施例的流程示意圖;[〇〇53]圖5為本發(fā)明讀寫SD卡的方法的第五實施例的流程示意圖;[〇〇54]圖6為本發(fā)明讀寫SD卡的裝置的第一實施例的功能模塊示意圖;[〇〇55]圖7為本發(fā)明讀寫SD卡的裝置的第二實施例的功能模塊示意圖;[〇〇56]圖8為本發(fā)明讀寫SD卡的裝置的第三實施例的功能模塊示意圖;
      [0057]圖9為本發(fā)明讀寫SD卡的裝置的第四實施例的功能模塊示意圖;[〇〇58]圖10為本發(fā)明讀寫SD卡的裝置的第五實施例的功能模塊示意圖。
      [0059]本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步說明。【具體實施方式】
      [0060]應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
      [0061]上述問題,本發(fā)明提供一種讀寫SD卡的方法。[〇〇62]參照圖1,圖1為本發(fā)明讀寫SD卡的方法的第一實施例的流程示意圖。[〇〇63]在本實施例中,所述讀寫SD卡的方法包括:[〇〇64]步驟S10,通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用基帶芯片的GP10接口模擬;[〇〇65]在本實施例中,由于現(xiàn)有的大部分低成本系統(tǒng)由于僅具有GP10接口,而GP10接口無法實現(xiàn)與SD卡之間的通信,以MTK6223D系統(tǒng)為例。使用MTK6223D系統(tǒng)的終端的基帶芯片中不存在SPI接口,使得所述終端不支持SD卡的讀寫功能,然而可以采用所述基帶芯片的 GP1接口模擬所述SPI接口的方式以實現(xiàn)對SD卡的讀寫功能的支持。比如,通過將SD卡的輸出端、輸入端、片選端和時鐘信號端分別連接至所述基帶芯片的GP1接口,然后對照SPI傳輸模式的時序圖使用軟件的方式來模擬SPI傳輸模式的時序。具體的,由于SD的命令、數(shù)據(jù)傳輸?shù)?,全部都是SPI傳輸模式的時序圖來傳輸,因此,可以通過控制GP1接口的拉低、拉高來模擬SPI傳輸模式的時序,從而進行數(shù)據(jù)的傳輸,交互。[〇〇66]在通過軟件的方式將基帶芯片的GP10接口模擬所述SPI接口后,主機,即基帶芯片通過模擬的SPI接口對SD卡進行初始化,具體的初始化流程主要包括以下步驟:[〇〇67]步驟1、發(fā)送74個時鐘周期;[〇〇68] 步驟2、發(fā)送復位命令,指令為CMD0;[〇〇69]步驟3、如果SD卡在接收到復位命令時,片選端低電平有效,則進入SPI模式;[〇〇7〇]步驟4、發(fā)送激活命令,指令為CMD1;[〇〇71] 步驟5、接收SD卡響應;[〇〇72] 步驟6、判斷響應命令的bitO是否為‘0’ ;[〇〇73] 步驟7、若bit0 = 0,則初始化完成。[〇〇74]在SD卡初始化完成后,主機可以通過CMD55指令和CMD41指令判斷當前電壓是否在工作范圍內,還可以通過CMD10指令讀取SD寄存器,通過CMD16指令設置讀取接收block(塊) 的長度,通過CMD9指令讀取卡的CSD寄存器,從所述CSD寄存器中,主機(基帶芯片)可以獲取到卡的容量,支持的命令等重要參數(shù)。[〇〇75]步驟S20,在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。[〇〇76]在SD卡完成初始化后,主機可以將數(shù)據(jù)寫入SD卡中,或者將數(shù)據(jù)從SD卡中讀取出來,即對所述SD卡進行讀/寫操作。若要將數(shù)據(jù)寫入SD卡中,則可以通過所述SPI接口發(fā)送寫操作命令至所述SD卡來實現(xiàn),所述寫操作命令包括單塊寫操作命令與多塊寫操作命令,所述單塊寫操作命令為將單個數(shù)據(jù)塊寫入SD中發(fā)送的命令,所述多塊寫操作命令為將多個數(shù)據(jù)塊寫入SD卡中發(fā)送的命令,即若待寫入數(shù)據(jù)包括多個數(shù)據(jù)塊,則首先發(fā)送單塊寫操作命令,進行數(shù)據(jù)寫入操作,然后發(fā)送多塊寫操作命令,以便將剩余的數(shù)據(jù)塊寫入SD卡中。在本實施例中,所述單塊寫操作命令可以為CMD24,所述多塊寫操作命令為CMD25。[〇〇77]在SD卡完成初始化后,若要將數(shù)據(jù)寫從SD卡中讀取出來,則可以通過所述SPI接口發(fā)送讀操作命令至所述SD卡來實現(xiàn),所述讀操作命令包括單塊讀操作命令與多塊讀操作命令,所述單塊讀操作命令為將單個數(shù)據(jù)塊從所述SD中讀取出來的命令,所述多塊讀操作命令為將多個數(shù)據(jù)塊從所述SD中讀取出來的命令,即若待讀取數(shù)據(jù)包括多個數(shù)據(jù)塊,則首先發(fā)送單塊讀操作命令,進行數(shù)據(jù)讀取操作,然后發(fā)送多塊讀操作命令,以便將剩余的數(shù)據(jù)塊從所述SD中讀取出來。在本實施例中,所述單塊讀操作命令可以為CMD17,所述多塊讀操作命令為CMD18。[〇〇78]本發(fā)明將終端基帶芯片的GP10接口模擬為SPI接口,并通過模擬的SPI接口對所述 SD卡進行初始化,在所述SD卡完成初始化后,通過模擬的SPI接口對SD卡進行讀寫操作,僅需要通過軟件程序實現(xiàn),而不需要增加額外的硬件芯片,降低了硬件成本。[〇〇79]參照圖2,圖2為本發(fā)明讀寫SD卡的方法的第二實施例的流程示意圖?;谏鲜龇椒ǖ牡谝粚嵤├岢霰景l(fā)明的第二實施例,在本實施例中,所述對所述SD卡進行寫操作的步驟包括:
      [0080]步驟S21,通過所述SPI接口發(fā)送寫操作命令至所述SD卡;
      [0081]步驟S22,在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù), 且所述響應數(shù)據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中; [〇〇82]步驟S23,在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;[〇〇83]由于SD卡讀寫都是通過發(fā)送CMD命令與通過接收響應應答來實現(xiàn)的,因此,在SD卡完成初始化后,主機若需要對SD卡進行寫操作,則需要通過所述SPI接口發(fā)送寫操作命令至所述SD卡,根據(jù)SD卡的傳輸協(xié)議,可以通過所述SPI接口發(fā)送單塊寫操作命令,比如,CMD24 命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0084]kal_uint32SD_ffrite_0ne_Bl〇ck(kal_uint32address,kal_uint32*txbuffer)〇
      [0085]SD卡在接收到主機發(fā)送的寫操作命令后,會對所述讀操作命令進行響應,響應數(shù)據(jù)以返回值的形式,該響應數(shù)據(jù)可以為等,主機在接收到SD卡反饋的響應的數(shù)據(jù)后,會判斷響應的數(shù)據(jù)是否為預設值,比如,所述預設值為‘〇’,若主機接收到SD卡響應的數(shù)據(jù)為預設值,則會將待寫入數(shù)據(jù)寫入SD卡中。主機在將待寫入數(shù)據(jù)寫入SD卡中時,是以數(shù)據(jù)塊為單位進行的,即每次在接收到SD卡基于所述寫操作命令反饋的正確的響應數(shù)據(jù)后,只能將待寫入數(shù)據(jù)中的一個待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中,因此,為了將待寫入數(shù)據(jù)的剩下的數(shù)據(jù)塊寫入SD卡中,在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,需要將待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊,然后繼續(xù)執(zhí)行步驟S21,即通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以便將當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊寫入SD卡中,直至將待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中時,才不需要通過所述SPI接口發(fā)送寫操作命令至所述SD卡。需要說明的是,根據(jù)SD卡的傳輸協(xié)議,主機在將待寫入數(shù)據(jù)的下一個數(shù)據(jù)塊寫入SD卡中時,通過所述SPI接口發(fā)送的寫操作命令應為多塊寫操作命令,比如 CMD25命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0086]kal_uint32SD_ffri te_Multi_Blocks(kal_uint32address,kal_uint32* txbuffer,kal_uint8blocks)〇[〇〇87]進一步地,主機在將待寫入數(shù)據(jù)的所有數(shù)據(jù)塊都寫入SD卡中后,可以發(fā)送停止命令停止寫操作,在本實施例中,所述停止命令可以為CMD12。[〇〇88]進一步地,參照圖3,圖3為本發(fā)明讀寫SD卡的方法的第三實施例的流程示意圖?;谏鲜龇椒ǖ牡诙嵤├岢霰景l(fā)明的第三實施例,在本實施例中,所述將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中的步驟之后,還包括:[〇〇89]步驟S24,接收所述SD卡的響應應答命令;[〇〇9〇]由于采用的是軟件的方式模擬SPI接口與SD卡進行通訊,考慮到GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,比如,在對SD卡進行讀或寫操作的過程中,接收到另一終端的通話請求,由于通話功能的任務優(yōu)先級高于采用軟件的方式模擬SPI接口與SD卡進行通訊的任務優(yōu)先級,因此,在接收到另一終端的通話請求后,會中斷模擬SPI接口與SD卡進行通訊的軟件的運行,從而出現(xiàn)掛起狀態(tài),引起數(shù)據(jù)的讀寫錯誤。因此,為了解決GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,可以在每次將數(shù)據(jù)塊寫入所述SD卡后,接收SD卡返回的響應應答命令,在本實施例中,所述響應應答命令為一個字節(jié)長度,具體為0x05,在本發(fā)明的其他實施例中,所述響應應答命令也可以為其他值,在本實施中,不做限定。主機在接收到SD卡的響應應答命令后,會判斷所述響應應答命令是否正確,若所述響應應答命令正確,則表明當前寫入的數(shù)據(jù)塊沒有出錯,若所述響應應答命令不正確,則表明當前寫入的數(shù)據(jù)塊出錯。若確定所述響應應答命令正確時,則執(zhí)行步驟S23,即將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;若確定所述響應應答命令不正確,則需要將當前寫入的數(shù)據(jù)塊進行重新寫入SD卡中,具體的,可以通過將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,然后再執(zhí)行步驟S21,即通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以重新對該待寫入數(shù)據(jù)塊進行寫操作,其中,本次發(fā)送的寫操作命令為單塊寫操作命令。
      [0091]本實施例通過在每次將待寫入數(shù)據(jù)塊寫入所述SD卡后,接收SD卡的響應應答命令,以確定所述待寫入數(shù)據(jù)塊是否寫入正確,從而提高寫入數(shù)據(jù)的準確率。[〇〇92]進一步地,參照圖4,圖4為本發(fā)明讀寫SD卡的方法的第四實施例的流程示意圖?;谏鲜龇椒ǖ娜我粚嵤├岢霰景l(fā)明的第四實施例,在本實施例中,所述對所述SD卡進行讀操作的步驟包括:[〇〇93]步驟S25,通過所述SPI接口發(fā)送讀操作命令至所述SD卡;[〇〇94]步驟S26,在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù), 且所述響應數(shù)據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù)塊;
      [0095]步驟S27,在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊。[〇〇96]由于SD卡讀寫都是通過發(fā)送CMD命令與通過接收響應應答來實現(xiàn)的,因此,在SD卡完成初始化后,主機若需要對SD卡進行讀操作,則需要通過所述SPI接口發(fā)送讀操作命令至所述SD卡,根據(jù)SD卡的傳輸協(xié)議,可以通過所述SPI接口發(fā)送單塊寫操作命令,比如,CMD17 命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0097]kal_uint32SD_Read_0ne_Block(kal_uint32data_adrs,kal_uint32*rxbufTer)〇
      [0098]SD卡在接收到主機發(fā)送的讀操作命令后,也會對所述讀操作命令進行響應,響應數(shù)據(jù)包括針對所述讀操作命令的返回值,以及起始令牌,該返回值可以為等,主機在接收到SD卡的返回值,會判斷該返回值是否為預設值,比如,所述預設值為‘0’,若主機接收到SD卡的返回值為預設值,則會繼續(xù)讀取SD卡返回的起始令牌,并判斷該返回的起始令牌是否正確,在本實施例中,若所述返回的起始令牌為0XFE時,表明起始令牌正確,主機隨后會將對所述SD卡進行寫操作,若所述返回的起始令牌不為0XFE時,不對所述SD卡進行寫操作節(jié)。主機在將待讀取數(shù)據(jù)從SD卡中讀取出來時,也是以數(shù)據(jù)塊為單位進行的,即每次在接收到SD卡基于所述讀操作命令反饋的正確的響應數(shù)據(jù)后,只能經(jīng)所述SPI接口從所述SD 卡中讀取一個待讀取數(shù)據(jù)塊,因此,為了將待讀取數(shù)據(jù)的剩下的數(shù)據(jù)塊從SD卡讀取出來中, 在讀取到所述待讀取數(shù)據(jù)塊后,需要將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊,然后繼續(xù)執(zhí)行步驟S25,即通過所述SPI接口發(fā)送讀操作命令至所述SD 卡,以便將當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊從SD卡中讀取出來,直至將所述待讀取數(shù)據(jù)的所有數(shù)據(jù)塊從所述SD卡中讀取出來時,才不需要通過所述SPI接口發(fā)送讀操作命令至所述 SD卡。需要說明的是,根據(jù)SD卡的傳輸協(xié)議,主機在將待讀取數(shù)據(jù)的下一個數(shù)據(jù)塊從SD卡中讀取出來時,通過所述SPI接口發(fā)送的讀操作命令應為多塊讀操作命令,比如CMD18命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0099]kal_uint32SD_Read_Multi_Blocks(kal_uint32data_adrs,kal_uint32* rxbuffer,kal_uint8sectors)〇
      [0100]進一步地,主機在待讀取數(shù)據(jù)的所有數(shù)據(jù)塊都從SD卡中讀取出來后,可以發(fā)送停止命令停止讀操作,在本實施例中,所述停止命令為CMD12??梢酝ㄟ^如下函數(shù)實現(xiàn)停止命令的發(fā)送:
      [0101]kal_uint32SD_ffrite_0ne_Bl〇ck(kal_uint32address,kal_uint32*txbuffer)〇
      [0102]進一步地,參照圖5,圖5為本發(fā)明讀寫SD卡的方法的第五實施例的流程示意圖。基于上述方法的第四實施例提出本發(fā)明的第五實施例,在本實施例中,所述將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)的步驟之前,還包括:
      [0103]步驟S28,在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確。
      [0104]由于采用的是軟件的方式模擬SPI接口與SD卡進行通訊,考慮到GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,比如,在對SD卡進行讀或寫操作的過程中,接收到另一終端的通話請求,由于通話功能的任務優(yōu)先級高于采用軟件的方式模擬SPI接口與SD卡進行通訊的任務優(yōu)先級,因此,在接收到另一終端的通話請求后,會中斷模擬SPI接口與SD卡進行通訊的軟件的運行,從而出現(xiàn)掛起狀態(tài),引起數(shù)據(jù)的讀寫錯誤。因此,為了解決GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,可以在每次讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確,具體的,可以通過所述待讀取數(shù)據(jù)塊中的數(shù)據(jù)按照預設的校驗算法生成校驗碼,然后將生成的校驗碼與所述待讀取數(shù)據(jù)塊中的校驗碼進行比較, 以判斷校驗碼是否正確,若生成的校驗碼與讀取的校驗碼不相同,則表明本次讀取操作出錯,若生成的校驗碼與所述待讀取數(shù)據(jù)塊中的校驗碼相同,則表明本次讀取操作未出錯。若確定所述校驗碼正確時,則執(zhí)行步驟S27,即將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;若確定所述校驗碼不正確,則需要將當前讀取的數(shù)據(jù)塊重新從 SD卡中讀取出來,具體的,可以通過將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù)塊,然后再執(zhí)行步驟S25,即通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以重新對該待讀取數(shù)據(jù)塊進行讀取操作,其中,本次發(fā)送的讀操作命令為單塊讀操作命令。
      [0105]本實施例在每次將待讀取數(shù)據(jù)塊從所述SD卡讀取后,通過判斷校驗碼是否正確的方式來確定對所述待讀取數(shù)據(jù)塊的讀取是否正確,從而提高讀取數(shù)據(jù)的準確率。
      [0106]本發(fā)明進一步提供一種讀寫SD卡裝置。[〇1〇7]參照圖6,圖6為本發(fā)明讀寫SD卡裝置的第一實施例的功能模塊示意圖。[〇1〇8]在本實施例中,所述讀寫SD卡的裝置包括:初始化模塊10及讀寫模塊20。[〇1〇9]所述初始化模塊10,用于通過模擬的SPI接口對所述SD卡進行初始化,其中,所述 SPI接口采用基帶芯片的GP10接口模擬;[〇11〇]在本實施例中,由于現(xiàn)有的大部分低成本系統(tǒng)由于僅具有GP10接口,而GP10接口無法實現(xiàn)與SD卡之間的通信,以MTK6223D系統(tǒng)為例。使用MTK6223D系統(tǒng)的終端的基帶芯片中不存在SPI接口,使得所述終端不支持SD卡的讀寫功能,然而可以采用所述基帶芯片的 GP10接口模擬所述SPI接口的方式以實現(xiàn)對SD卡的讀寫功能的支持。比如,通過將SD卡的輸出端、輸入端、片選端和時鐘信號端分別連接至所述基帶芯片的GP1接口,然后對照SPI傳輸模式的時序圖使用軟件的方式來模擬SPI傳輸模式的時序。具體的,由于SD的命令、數(shù)據(jù)傳輸?shù)?,全部都是SPI傳輸模式的時序圖來傳輸,因此,可以通過控制GP10接口的拉低、拉高來模擬SPI傳輸模式的時序,從而進行數(shù)據(jù)的傳輸,交互。
      [0111]在通過軟件的方式將基帶芯片的GP10接口模擬所述SPI接口后,主機,即基帶芯片通過模擬的SPI接口對SD卡進行初始化,具體的初始化流程主要包括以下步驟:
      [0112]步驟1、發(fā)送74個時鐘周期;
      [0113]步驟2、發(fā)送復位命令,指令為CMD0;
      [0114]步驟3、如果SD卡在接收到復位命令時,片選端低電平有效,則進入SPI模式;
      [0115]步驟4、發(fā)送激活命令,指令為CMD1;
      [0116] 步驟5、接收SD卡響應;
      [0117] 步驟6、判斷響應命令的bitO是否為‘0’ ;
      [0118] 步驟7、若b i t0 = 0,則初始化完成。
      [0119]在SD卡初始化完成后,主機可以通過CMD55指令和CMD41指令判斷當前電壓是否在工作范圍內,還可以通過CMD10指令讀取SD寄存器,通過CMD16指令設置讀取接收block(塊) 的長度,通過CMD9指令讀取卡的CSD寄存器,從所述CSD寄存器中,主機(基帶芯片)可以獲取到卡的容量,支持的命令等重要參數(shù)。[〇12〇]所述讀寫模塊20,用于在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。 [〇121]在SD卡完成初始化后,主機可以將數(shù)據(jù)寫入SD卡中,或者將數(shù)據(jù)從SD卡中讀取出來,即對所述SD卡進行讀/寫操作。若要將數(shù)據(jù)寫入SD卡中,則可以通過所述SPI接口發(fā)送寫操作命令至所述SD卡來實現(xiàn),所述寫操作命令包括單塊寫操作命令與多塊寫操作命令,所述單塊寫操作命令為將單個數(shù)據(jù)塊寫入SD中發(fā)送的命令,所述多塊寫操作命令為將多個數(shù)據(jù)塊寫入SD卡中發(fā)送的命令,即若待寫入數(shù)據(jù)包括多個數(shù)據(jù)塊,則首先發(fā)送單塊寫操作命令,進行數(shù)據(jù)寫入操作,然后發(fā)送多塊寫操作命令,以便將剩余的數(shù)據(jù)塊寫入SD卡中。在本實施例中,所述單塊寫操作命令可以為CMD24,所述多塊寫操作命令為CMD25。
      [0122]在SD卡完成初始化后,若要將數(shù)據(jù)寫從SD卡中讀取出來,則可以通過所述SPI接口發(fā)送讀操作命令至所述SD卡來實現(xiàn),所述讀操作命令包括單塊讀操作命令與多塊讀操作命令,所述單塊讀操作命令為將單個數(shù)據(jù)塊從所述SD中讀取出來的命令,所述多塊讀操作命令為將多個數(shù)據(jù)塊從所述SD中讀取出來的命令,即若待讀取數(shù)據(jù)包括多個數(shù)據(jù)塊,則首先發(fā)送單塊讀操作命令,進行數(shù)據(jù)讀取操作,然后發(fā)送多塊讀操作命令,以便將剩余的數(shù)據(jù)塊從所述SD中讀取出來。在本實施例中,所述單塊讀操作命令可以為CMD17,所述多塊讀操作命令為CMD18。
      [0123]本發(fā)明將終端基帶芯片的GP10接口模擬為SPI接口,并通過模擬的SPI接口對所述 SD卡進行初始化,在所述SD卡完成初始化后,通過模擬的SPI接口對SD卡進行讀寫操作,僅需要通過軟件程序實現(xiàn),而不需要增加額外的硬件芯片,降低了硬件成本。
      [0124]進一步地,參照圖7,圖7為本發(fā)明讀寫SD卡的裝置的第二實施例的功能模塊示意圖,基于上述裝置第一實施例提出本發(fā)明的第二實施例,在本實施例中,所述讀寫模塊20包括:發(fā)送單元21、寫入單元22及作為單元23。
      [0125] 所述發(fā)送單元21,用于通過所述SPI接口發(fā)送寫操作命令至所述SD卡;
      [0126]所述寫入單元22,用于在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中;
      [0127]所述作為單元23,還用于在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;
      [0128]所述發(fā)送單元21,還用于繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡,直至將所述待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。
      [0129]由于SD卡讀寫都是通過發(fā)送CMD命令與通過接收響應應答來實現(xiàn)的,因此,在SD卡完成初始化后,主機若需要對SD卡進行寫操作,則需要通過所述SPI接口發(fā)送寫操作命令至所述SD卡,,根據(jù)SD卡的傳輸協(xié)議,可以通過所述SPI接口發(fā)送單塊寫操作命令,比如,CMD24 命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0130]kal_uint32SD_ffrite_0ne_Bl〇ck(kal_uint32address,kal_uint32*txbuffer)〇
      [0131]SD卡在接收到主機發(fā)送的寫操作命令后,會對所述讀操作命令進行響應,響應數(shù)據(jù)以返回值的形式,該響應數(shù)據(jù)可以為等,主機在接收到SD卡反饋的響應的數(shù)據(jù)后,會判斷響應的數(shù)據(jù)是否為預設值,比如,所述預設值為‘〇’,若主機接收到SD卡響應的數(shù)據(jù)為預設值,則會將待寫入數(shù)據(jù)寫入SD卡中。主機在將待寫入數(shù)據(jù)寫入SD卡中時,是以數(shù)據(jù)塊為單位進行的,即每次在接收到SD卡基于所述寫操作命令反饋的正確的響應數(shù)據(jù)后,只能將待寫入數(shù)據(jù)中的一個待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中,因此,為了將待寫入數(shù)據(jù)的剩下的數(shù)據(jù)塊寫入SD卡中,在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,需要將待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊,然后繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以便將當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊寫入SD卡中,直至將待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中時,才不需要通過所述SPI接口發(fā)送寫操作命令至所述SD卡。需要說明的是,根據(jù)SD卡的傳輸協(xié)議,主機在將待寫入數(shù)據(jù)的下一個數(shù)據(jù)塊寫入SD 卡中時,通過所述SPI接口發(fā)送的寫操作命令應為多塊寫操作命令,比如CMD25命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0132]kal_uint32SD_ffri te_Multi_Blocks(kal_uint32address,kal_uint32* txbuffer,kal_uint8blocks)〇
      [0133]進一步地,主機在將待寫入數(shù)據(jù)的所有數(shù)據(jù)塊都寫入SD卡中后,可以發(fā)送停止命令停止寫操作,在本實施例中,所述停止命令為CMD12。
      [0134]進一步地,參照圖8,圖8為本發(fā)明讀寫SD卡的裝置的第三實施例的功能模塊示意圖,基于上述裝置的第二實施例提出本發(fā)明的第三實施例,在本實施例中,所述讀寫模塊20 還包括:接收單元24。
      [0135]所述接收單元24,用于接收所述SD卡的響應應答命令;
      [0136]所述作為單元23,還用于在所述響應應答命令正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;
      [0137]所述發(fā)送單元21,還用于在所述響應應答命令不正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述 SD卡,直至將所述待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。
      [0138]由于采用的是軟件的方式模擬SPI接口與SD卡進行通訊,考慮到GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,比如,在對SD卡進行讀或寫操作的過程中,接收到另一終端的通話請求,由于通話功能的任務優(yōu)先級高于采用軟件的方式模擬SPI接口與SD卡進行通訊的任務優(yōu)先級,因此,在接收到另一終端的通話請求后,會中斷模擬SPI接口與SD卡進行通訊的軟件的運行,從而出現(xiàn)掛起狀態(tài),引起數(shù)據(jù)的讀寫錯誤。。因此,為了解決GP1接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,可以在每次將數(shù)據(jù)塊寫入所述SD卡后,接收SD卡返回的響應應答命令,在本實施例中,所述響應應答命令為一個字節(jié)長度,具體為0x05,在本發(fā)明的其他實施例中,所述響應應答命令也可以為其他值,在本實施中,不做限定。主機在接收到SD卡的響應應答命令后,會判斷所述響應應答命令是否正確,若所述響應應答命令正確,則表明當前寫入的數(shù)據(jù)塊沒有出錯,若所述響應應答命令不正確,則表明當前寫入的數(shù)據(jù)塊出錯。若確定所述響應應答命令正確時,則將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;若確定所述響應應答命令不正確,則需要將當前寫入的數(shù)據(jù)塊進行重新寫入SD卡中,具體的,可以通過將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,然后再通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以重新對該待寫入數(shù)據(jù)塊進行寫操作,其中,本次發(fā)送的寫操作命令為單塊寫操作命令。
      [0139]本實施例通過在每次將待寫入數(shù)據(jù)塊寫入所述SD卡后,接收SD卡的響應應答命令,以確定所述待寫入數(shù)據(jù)塊是否寫入正確,從而提高寫入數(shù)據(jù)的準確率。
      [0140]進一步地,參照圖9,圖9為本發(fā)明讀寫SD卡的裝置的第四實施例的功能模塊示意圖,基于上述裝置的第二或第三實施例提出本發(fā)明的第四實施例,在本實施例中,所述讀寫模塊20還包括:讀取單元25。
      [0141]所述發(fā)送單元21,還用于通過所述SPI接口發(fā)送讀操作命令至所述SD卡;
      [0142]所述讀取單元25,用于在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù),且所述響應數(shù)據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù)塊;
      [0143]所述作為單元23,還用于在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;
      [0144]所述發(fā)送單元21,還用于繼續(xù)通過所述SPI接口發(fā)送讀操作命令至所述SD卡。
      [0145]由于SD卡讀寫都是通過發(fā)送CMD命令與通過接收響應應答來實現(xiàn)的,因此,在SD卡完成初始化后,主機若需要對SD卡進行讀操作,則需要通過所述SPI接口發(fā)送讀操作命令至所述SD卡,,根據(jù)SD卡的傳輸協(xié)議,可以通過所述SPI接口發(fā)送單塊寫操作命令,比如,CMD17 命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0146]kal_uint32SD_Read_0ne_Block(kal_uint32data_adrs,kal_uint32*rxbufTer)〇
      [0147]SD卡在接收到主機發(fā)送的讀操作命令后,也會對所述讀操作命令進行響應,響應數(shù)據(jù)包括針對所述讀操作命令的返回值,以及起始令牌,該返回值可以為等,主機在接收到SD卡的返回值,會判斷該返回值是否為預設值,比如,所述預設值為‘0’,若主機接收到SD卡的返回值為預設值,則會繼續(xù)讀取SD卡返回的起始令牌,并判斷該返回的起始令牌是否正確,在本實施例中,若所述返回的起始令牌為0XFE時,表明起始令牌正確,主機隨后會將對所述SD卡進行寫操作,若所述返回的起始令牌不為0XFE時,不對所述SD卡進行寫操作節(jié)。主機在將待讀取數(shù)據(jù)從SD卡中讀取出來時,也是以數(shù)據(jù)塊為單位進行的,即每次在接收到SD卡基于所述讀操作命令反饋的正確的響應數(shù)據(jù)后,只能經(jīng)所述SPI接口從所述SD卡中讀取一個待讀取數(shù)據(jù)塊,因此,為了將待讀取數(shù)據(jù)的剩下的數(shù)據(jù)塊從SD卡讀取出來中, 在讀取到所述待讀取數(shù)據(jù)塊后,需要將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊,然后繼續(xù)通過所述SPI接口發(fā)送讀操作命令至所述SD卡,以便將當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊從SD卡中讀取出來,直至將所述待讀取數(shù)據(jù)的所有數(shù)據(jù)塊從所述 SD卡中讀取出來時,才不需要通過所述SPI接口發(fā)送讀操作命令至所述SD卡。需要說明的是,根據(jù)SD卡的傳輸協(xié)議,主機在將待讀取數(shù)據(jù)的下一個數(shù)據(jù)塊從SD卡中讀取出來時,通過所述SPI接口發(fā)送的讀操作命令應為多塊讀操作命令,比如CMD18命令,具體的,可以通過如下相關函數(shù)實現(xiàn):
      [0148]kal_uint32SD_Read_Multi_Blocks(kal_uint32data_adrs,kal_uint32* rxbuffer,kal_uint8sectors)〇
      [0149]進一步地,主機在待讀取數(shù)據(jù)的所有數(shù)據(jù)塊都從SD卡中讀取出來后,可以發(fā)送停止命令停止讀操作,在本實施例中,所述停止命令為CMD12??梢酝ㄟ^如下函數(shù)實現(xiàn)停止命令的發(fā)送:
      [0150]進一步地,參照圖10,圖10為本發(fā)明讀寫SD卡的裝置的第無實施例的功能模塊示意圖,基于上述裝置的第四實施例提出本發(fā)明的第五實施例,在本實施例中,所述讀寫模塊 20還包括:判斷單元26。[0151 ]所述判斷單元26,用于在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確;[〇152]所述作為單元23,還用于若所述校驗碼正確,則將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;
      [0153]所述發(fā)送單元21,還用于若所述校驗碼不正確,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡。 [〇154]由于采用的是軟件的方式模擬SPI接口與SD卡進行通訊,考慮到GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,比如,在對SD卡進行讀或寫操作的過程中,接收到另一終端的通話請求,由于通話功能的任務優(yōu)先級高于采用軟件的方式模擬SPI接口與SD卡進行通訊的任務優(yōu)先級,因此,在接收到另一終端的通話請求后,會中斷模擬SPI接口與SD卡進行通訊的軟件的運行,從而出現(xiàn)掛起狀態(tài),引起數(shù)據(jù)的讀寫錯誤。因此,為了解決GP10接口可能受到干擾而引起數(shù)據(jù)的讀寫錯誤,可以在每次讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確,具體的,可以通過所述待讀取數(shù)據(jù)塊中的數(shù)據(jù)按照預設的校驗算法生成校驗碼,然后將生成的校驗碼與所述待讀取數(shù)據(jù)塊中的校驗碼進行比較, 以判斷校驗碼是否正確,若生成的校驗碼與讀取的校驗碼不相同,則表明本次讀取操作出錯,若生成的校驗碼與所述待讀取數(shù)據(jù)塊中的校驗碼相同,則表明本次讀取操作未出錯。若確定所述校驗碼正確時,則將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;若確定所述校驗碼不正確,則需要將當前讀取的數(shù)據(jù)塊重新從SD卡中讀取出來, 具體的,可以通過將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù)塊,然后再通過所述SPI接口發(fā)送寫操作命令至所述SD卡,以重新對該待讀取數(shù)據(jù)塊進行讀取操作。
      [0155]本實施例在每次將待讀取數(shù)據(jù)塊從所述SD卡讀取后,通過判斷校驗碼是否正確的方式來確定對所述待讀取數(shù)據(jù)塊的讀取是否正確,從而提高讀取數(shù)據(jù)的準確率。
      [0156]上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。這樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產品的形式體現(xiàn)出來,該計算機軟件產品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,空調器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
      [0157]以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。
      【主權項】
      1.一種讀寫SD卡的方法,其特征在于,所述讀寫SD卡的方法包括以下步驟:通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用基帶芯片的GP1 接口模擬;在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。2.如權利要求1所述的讀寫SD卡的方法,其特征在于,所述對所述SD卡進行寫操作的步 驟包括:通過所述SPI接口發(fā)送寫操作命令至所述SD卡;在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù),且所述響應數(shù) 據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中;在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下 一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟,直至將所述待寫 入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。3.如權利要求2所述的讀寫SD卡的方法,其特征在于,所述將待寫入數(shù)據(jù)中的待寫入數(shù) 據(jù)塊經(jīng)SPI接口寫入所述SD卡中的步驟之后,還包括:接收所述SD卡的響應應答命令;在所述響應應答命令正確時,執(zhí)行所述將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊的下一 數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊的步驟;在所述響應應答命令不正確時,將所述待寫入數(shù)據(jù)中當前寫入的數(shù)據(jù)塊繼續(xù)作為待寫 入數(shù)據(jù)塊,并繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟。4.如權利要求1所述的讀寫SD卡的方法,其特征在于,所述對所述SD卡進行讀操作的步 驟包括:通過所述SPI接口發(fā)送讀操作命令至所述SD卡;在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù),且所述響應數(shù) 據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù)塊;在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊 作為待讀取數(shù)據(jù)塊;繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送讀操作命令至所述SD卡的步驟,直至讀取完所述 待讀取數(shù)據(jù)的所有數(shù)據(jù)塊。5.如權利要求4所述的讀寫SD卡的方法,其特征在于,所述將所述待讀取數(shù)據(jù)中當前讀 取的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)的步驟之前,還包括:在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確;若所述校驗碼正確,則執(zhí)行所述將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊的下一數(shù)據(jù)塊 作為待讀取數(shù)據(jù)塊的步驟;所述判斷所述待讀取數(shù)據(jù)塊中的校驗碼是否正確的步驟之后,所述讀寫SD卡的方法還 包括步驟:若所述校驗碼不正確,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊繼續(xù)作為待讀取數(shù)據(jù) 塊,并繼續(xù)執(zhí)行所述通過所述SPI接口發(fā)送寫操作命令至所述SD卡的步驟。6.—種讀寫SD卡的裝置,其特征在于,所述讀寫SD卡的裝置包括:初始化模塊,用于通過模擬的SPI接口對所述SD卡進行初始化,其中,所述SPI接口采用 基帶芯片的GP1接口模擬;讀寫模塊,用于在所述SD卡完成初始化后,對所述SD卡進行讀/寫操作。7.如權利要求6所述的讀寫SD卡的裝置,其特征在于,所述讀寫模塊包括:發(fā)送單元,用于通過所述SPI接口發(fā)送寫操作命令至所述SD卡;寫入單元,用于在所述SPI接口接收到所述SD卡基于所述寫操作命令反饋的響應數(shù)據(jù), 且所述響應數(shù)據(jù)為預設值時,將待寫入數(shù)據(jù)中的待寫入數(shù)據(jù)塊經(jīng)SPI接口寫入所述SD卡中;作為單元,用于在將所述待寫入數(shù)據(jù)塊寫入所述SD卡后,將所述待寫入數(shù)據(jù)中當前寫 入的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;所述發(fā)送單元,還用于繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡,直至將所述 待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。8.如權利要求7所述的讀寫SD卡的裝置,其特征在于,所述讀寫模塊還包括:接收單元,用于接收所述SD卡的響應應答命令;所述作為單元,還用于在所述響應應答命令正確時,將所述待寫入數(shù)據(jù)中當前寫入的 數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待寫入數(shù)據(jù)塊;所述發(fā)送單元,還用于在所述響應應答命令不正確時,將所述待寫入數(shù)據(jù)中當前寫入 的數(shù)據(jù)塊繼續(xù)作為待寫入數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡,直 至將所述待寫入數(shù)據(jù)的所有數(shù)據(jù)塊寫入所述SD卡中。9.如權利要求7所述的讀寫SD卡的裝置,其特征在于,所述讀寫模塊還包括:所述發(fā)送單元,還用于通過所述SPI接口發(fā)送讀操作命令至所述SD卡;讀取單元,用于在所述SPI接口接收到所述SD卡基于所述讀操作命令反饋的響應數(shù)據(jù), 且所述響應數(shù)據(jù)為預設值時,經(jīng)所述SPI接口從所述SD卡中讀取待讀取數(shù)據(jù)的待讀取數(shù)據(jù) 塊;所述作為單元,還用于在讀取到所述待讀取數(shù)據(jù)塊后,將所述待讀取數(shù)據(jù)中當前讀取 的數(shù)據(jù)塊的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;所述發(fā)送單元,還用于繼續(xù)通過所述SPI接口發(fā)送讀操作命令至所述SD卡。10.如權利要求9所述的讀寫SD卡的裝置,其特征在于,所述讀寫模塊還包括:判斷單元,用于在讀取到所述待讀取數(shù)據(jù)塊后,判斷所述待讀取數(shù)據(jù)塊中的校驗碼是 否正確;所述作為單元,還用于若所述校驗碼正確,則將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊 的下一數(shù)據(jù)塊作為待讀取數(shù)據(jù)塊;所述發(fā)送單元,還用于若所述校驗碼不正確,將所述待讀取數(shù)據(jù)中當前讀取的數(shù)據(jù)塊 繼續(xù)作為待讀取數(shù)據(jù)塊,并繼續(xù)通過所述SPI接口發(fā)送寫操作命令至所述SD卡。
      【文檔編號】G06K17/00GK106022406SQ201610331484
      【公開日】2016年10月12日
      【申請日】2016年5月18日
      【發(fā)明人】趙衛(wèi)東, 胡偉, 吳雄華
      【申請人】深圳市微網(wǎng)力合信息技術有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1