新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)

        工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)

        作者: 時間:2013-05-11 來源:網絡 收藏
        的SDIO控制SD卡

          一、的SDIO適配器的結構

          的SDIO適配器包括與AHB總線接口和SD卡接口兩個大塊兒。如下面圖中兩個灰色陰影區域。

          左側的陰影部分又細分兩個子單無,適配器寄存器組和FIFO。適配器寄存器組包含了所有SDIO所有的寄存器,這些寄存器用于配置一些參數,以實現一些SD協議中的時序,最終于實現SD卡的命令傳輸。FIFO則是為了實現數據的傳輸,這兩者部分分別代表者對SD卡的兩種傳輸操作,即命令的傳輸和數據的傳輸。

          右側的陰影部分,即SDIO適配器的SD卡接口大塊兒,又細分為三個子單元。控制單元(Control Unit),命令通道和數據通道(Command Path and Data Path)。控制單元主要實現電源和時鐘的控制。它根據適配器寄存器組中寄存器的配置,開啟和關閉SDIO適配器模塊的電源,改變工作的時鐘源(直接使用 SDIO_CLK還是其分頻后的時鐘等)。命令通道連接CMD線,控制命令的傳輸。數據通道連接數據線(DAT0~DAT7),控制數據的傳輸。

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          二、分單元詳述

          下面按照上面一章提到的五個子單元的劃分,對各子單元進行詳細的描述。

          1、適配器寄存器組

          The adapter register block contains all system registers. This block also generates the signals that clear the static flags in the multimedia card. The clear signals are generated when 1 is written into the corresponding bit location in the SDIO Clear register.

          這個STM32數據手冊上關于這一部分的全部描述,大體上就是說:適配器寄存器組包含了所有的系統寄存器。它還產生用于清除MMC卡的靜態標志位的信號。當向SDIO Clear register(清除寄存器)的對應位寫1,即產生這個信號。

          2、控制單元

          這一單元又在內部分為電源管理和時鐘管理兩個子單元,他們都受控制適配器寄存器組。時鐘管理子單元產生和控制時鐘信號SDIO_CK,也就是SD卡最絡接收到的SCK。時鐘管理子單元工作于兩種模式時鐘分頻模式和時鐘直通模式(Bypass,標準的翻譯不知是什么,似乎可以是“旁路”,但“直通”更容易理解些)。當工作在直通模式進,SDIO_CK==SDIO_CLK.工作于分頻模塊時,SDIO_CK==SDIO_CLK/div.

          在如下情形下,時鐘是不輸出時鐘信號的:

          復位后

          上電和掉電期間

          省電模式下總線處于空閑模式時

          電源管理子單元在上電和掉電時關繼時適配器的輸出信號。

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)

          3、命令通道

          命令通道向卡發送命令和接收回應。

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          如圖所示,圖上左側陰影部分是屬于適配器寄存器組子單元里的兩個寄存器,分別為SDIO_ARG和SDIO_CMD,后者用于添加想要發送的命令,前者用于添加所要發送的命令的參數,將兩個添好之后使能命令發送,命令就會自動發送出去。適配器上述兩個寄存器的內容進行組合,并最終形成48位長的命令,這48 位首先進入移位寄存器,即圖中的Shift register,在這里由并轉串一位一位的發送,由圖可見,這些位要經過CRC后,才發送出去。實際上,前面講的總位數并非48,在這里經過CRC,生成那些位的CRC較驗值,并追加到其尾部,最絡才是48位。命令分為有回應的和沒有回應的兩種。如果發送的是沒有回應的命令,發送之后會對標志位中的相送位置位,通知系統,命令發送正常,然后進入空閉狀態。如果發送的命令是有回應的命令,則要等待回應。接收到回應之后,會對回應進行CRC校驗,并設定相關位。下面是命令通道的狀態機:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          進入等待狀態后,命令時鐘(command timer)開始計時,如果到達超時時間CPSM狀態機還沒移動到接收狀態,則置位超時標志并進入空閑狀態。

          注意:命令超時時間是固定值,為64個SDIO_CK。

          如果在命令寄存器中設置了中斷位(interrupt bit),就不會啟用上面講到的超時時鐘,CPSM狀態機會一直等待來自卡的中斷請求。如果在命令寄存器中置位了懸停位(pending bit),CPSM狀態機會進入懸停狀態(所謂的掛起狀態),并等待來自數據通道子單元的CmdPend信號。檢測到CmdPend位以為,CPSM狀態機會移動到發送狀態(Send state),這將使數據計數器停止命令的傳輸。

          注意:CPSM會在空閑模式停留至少8個SDIO_CK時間,以滿足Ncc和Nrc的時間要求。Ncc時兩次主機命令傳輸的最小延遲,而Nrc時主機命令與卡的回應之間的最小延遲。如下圖:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          命令的格式:

          命令即是開始傳輸的一個標記。命令由主機發送給單個卡(尋址性命令)或是所有的卡(廣播性命令,MMC V3.31及更早的MMC卡標準中支持)。命令通過CMD信號線串行傳輸,所有的命令都有一個固定的長度,即48位。命令的格式如下圖:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          命令通道工作于半雙工模式,所以可以發送,也可以接收命令或回應。如果CPSM狀態機不在發送狀態(Send State),SDIO_CMD為高阻狀態(Hi-Z state),如下圖:

          

        工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)

          SDIO_CMD在SDIO_CK的上升沿進行同步。

          回應:

          回應是由被尋址的卡發出的一個標記(或是在MMC V3.31及以前標準中,所有連接在適配器上的卡同步發送),此標記由卡發給主機,是對剛剛接收到的命令的回答。回應是在CMD信號線上串行傳輸的。

          SDIO支持兩種回應類型,都是進行CRC校驗的:

          48位的短回應(short response)

          136位的長回應(long response)

          注意:如果回應不包含CRC校驗信息(如CMD1的回應),設備驅動就必須忽略CRC錯誤的狀態。

          下面兩張表是兩種回應的格式:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          前面講到,SDIO適配器包含兩個大塊兒,詳見本帖開頭,這里只拿出圖來:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


         其中,與AHB接口相連的有兩個塊兒,就是上圖中左側陰影部分,Adapter registers 和FIFO,即適配器寄存器組和數據FIFO。前者包含了適配器所有的寄存器,用于配置相應時序,產生相應的信號。

          這里面,用于控制命令通道產生命令時序的就有兩個寄存器,名為SDIO_ARG和SDIO_CMD,SDIO_ARG的三十二位全部用來存儲命令參數,也就沒什么好講的了。SDIO_CMD則不同,它有六個位,用來識別不同的命令,總共可以區別64個,但實際上SD卡的命令集沒有那么多。 SDIO_CMD還有一些位,用來表示些命令時否有回應,是長回應還是短回應,命令的類型是什么等等。適配器最終根據這些,加上CRC組合成一個48位的命令。

          另外,我們還提到過命令發送之后,如果這是一個沒有回應的命令,那么就很簡單,命令通道直接置位CMDSENT標志,或進入空閑狀態。如果是有回應的,則要等待回應,并設定相關的標志位。命令通道的相關標志位如下:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)


          CRC 產生器計算的是CRC碼前面的所有位的校驗和。這包括開始位,傳輸位,命令索引(command index)和命令參數(和卡狀態)。對長回應格式來說,CRC校驗和計算的是CID或CSD的前120位。這里不包括開始位,傳輸位和六個保留位。 CRC是一個7位的值,其計算方法如下:

          工程師STM32單片機學習基礎手記(4):用PWM實現熒火蟲燈(三)

        pwm相關文章:pwm是什么


        pwm相關文章:pwm原理




        關鍵詞: STM32 單片機 PWM

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 东方市| 贡觉县| 涞水县| 剑阁县| 长阳| 石阡县| 满洲里市| 定西市| 穆棱市| 瑞昌市| 伊宁市| 凌海市| 三台县| 洛南县| 凤山县| 祁东县| 淄博市| 平潭县| 东海县| 家居| 博野县| 乡城县| 江西省| 出国| 咸丰县| 公主岭市| 调兵山市| 卢龙县| 巴青县| 临猗县| 普兰县| 如东县| 石屏县| 高邮市| 西林县| 长宁县| 新竹县| 扎赉特旗| 肥城市| 洪雅县| 桂平市|