SD卡数据读取
文章目錄
- 一、實驗要求
- 二、實驗過程及結果
- (一)電路原理圖繪制
- 1. 安裝Altium Designer 18
- 1)軟件下載
- 2)軟件安裝
 
- 2. 繪制stm32最小系統的電路原理圖
- 1)新建工程
- 2)添加元件庫
- 3)繪制原理圖
- ① 繪制步驟
- ② 繪制結果
 
 
- 3. STM32+SD卡的系統原理圖設計
- 1)繪制步驟
- 2)繪制結果
 
 
- (二)SD卡數據讀取
- 1. SD卡介紹
- 1)SD卡物理結構
- 2)SD卡引腳
- 3)SDIO 總線
- ① 總線拓撲
- ② 總線協議
- ③ 命令
- ④ 響應
 
- 4)STM32 的 SDIO 功能框圖
 
- 2. SD卡讀取
- 1)工程下載
- 2)代碼修改
- 3)硬件操作
- 3)實際效果
 
 
 
- 三、實驗總結
- 四、參考資料
一、實驗要求
二、實驗過程及結果
(一)電路原理圖繪制
1. 安裝Altium Designer 18
1)軟件下載
百度網盤:ADB安裝文件.zip
 提取碼:luha
2)軟件安裝
打開AltiumDesigner18Setup.exe文件,開始安裝
 
 
 
 打開Crack文件夾,復制shfolder.dll文件到Altium Designer的安裝目錄下
 
 打開Altium Designer 軟件,選擇license,選擇文件并打開
 
 點擊設置,勾選Use localized resources,點擊OK,重啟Altium Designer,漢化成功
2. 繪制stm32最小系統的電路原理圖
1)新建工程
點擊File->New->Project->PCD Project,新建工程
 右擊PCD_Project1.PrjPCB,選擇Add New to Project->Schematic,新建原理圖
2)添加元件庫
百度網盤:元件庫.zip
 提取碼:luha
 按步驟添加元件庫文件:
3)繪制原理圖
① 繪制步驟
在元件庫中找到stm32f103c8t6芯片,雙擊打開,將元件放在中間
 點擊放置線延長管腳,左鍵在起始和終點各點擊一下連接,右鍵釋放掉
 (可使用 ctrl + c 復制,ctrl + v 粘貼,按空格可每90°旋轉器件)
點擊Net Label放置網絡編號,按tab鍵進入設置窗口,編輯編號名稱,回車退出編輯框,再左鍵放下
 選擇Text String備注文字,按tab鍵編輯屬性,按回車鍵確定
② 繪制結果
- STM32C8T6 芯片
 R:在Miscellaneous Devices LC.IntLib元件庫中搜索0805 10K
 
- 電源指示燈及單片機應用燈
 R:在Miscellaneous Devices LC.IntLib元件庫中搜索0805 1K
 D:在Miscellaneous Devices LC.IntLib元件庫中搜索0603
 
- STM32 去耦電路
 C:在Miscellaneous Devices LC.IntLib 元件庫中搜索0805 100nF
 
- 晶振電路
 Y:在Miscellaneous Devices.IntLib元件庫中搜索XTAL
 C:在Miscellaneous Devices LC.IntLib元件庫中搜索0805 22pF
 
 晶振電路為主控芯片提供系統時鐘,所有的外設工作和CPU 工作都要基于該時鐘,類似于整個系統的“心跳節拍”。
- 復位電路
 S:在Miscellaneous Devices.IntLib元件庫中搜索SW-PB
 C:在Miscellaneous Devices LC.IntLib元件庫中搜索0805 1uF
 
 低電平復位(引腳 NRST),硬件按鍵復位屬于系統復位之一。其中,電容 C5 的目的是按鍵消抖,防止在按鍵剛剛接觸/松開時的電平抖動引發誤動作(按鍵閉合/松開的接觸過程大約有 10ms 的抖動,對于主控芯片 I/O 控制而言是很長的時間,足以執行多次復位動作。由于電容電壓不會突變,所以采用電容濾波,防止抖動復位誤動作)。
- 降壓電路
 AMS1117:在stm32f103c8t6 最小系統.SchLib元件庫中
 
 由 LDO(Low Dropout Regulator)低壓差線性穩壓器將 5V 轉換為 3.3V,為主控芯片供電。
- 下載方式選擇及程序燒錄接口
 P:在Miscellaneous Connectors.IntLib元件庫中搜索MHDR
 
 程序開發的過程需下載 bin/hex 文件和在線仿真調試,可采用 SWD/JTAG 方式。SWD 比 JTAG 在高速模式下更可靠,且只需 4 引腳,因此實際開發一般采用 SWD 方式。其中,時鐘線 CLK 用于 JLink 和芯片的時鐘同步,一般頻率設置為 4MHz,可根據實際情況調整頻率。
- 電源輸入及輸出
 J:在base.SchLib元件庫中搜索USB micro
 
- 外接IO
 P:在Miscellaneous Connectors.IntLib元件庫中搜索MHDR1X16
3. STM32+SD卡的系統原理圖設計
1)繪制步驟
點擊右上角的Libraries,選擇下載的元件庫并尋找器件
 AMS1117:在stm32f103c8t6 最小系統.SchLib元件庫中
 P:在Miscellaneous Connectors.IntLib元件庫中搜索MHDR
 C:在Miscellaneous Devices LC.IntLib元件庫中搜索0805 100uF
 
2)繪制結果
STM32+SD卡原理圖
 
(二)SD卡數據讀取
1. SD卡介紹
SD卡(Secure Digital Memory Card)是一種為滿足安全性、容量、性能和使用環境等各方面的需求而設計的一種新型存儲器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式。其中,SD模式采用6線制,使用CLK、CMD、DAT0~DAT3進行數據通信;SPI模式采用4線制,使用CS、CLK、DataIn、DataOut進行數據通信。SD模式時的數據傳輸速度比SPI模式時快,采用單片機對SD卡進行讀寫時一般采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD或SPI模式。
 
1)SD卡物理結構
一張SD卡包括有存儲單元、存儲單元接口、電源檢測、卡及接口控制器和接口驅動器5 個部分。存儲單元是存儲數據部件,存儲單元通過存儲單元接口與卡控制單元進行數據傳輸;電源檢測單元保證SD卡工作在合適的電壓下,如出現掉電或上狀態時,它會使控制單元和存儲單元接口復位;卡及接口控制單元控制SD卡的運行狀態,它包括8 個寄存器;接口驅動器控制 SD 卡引腳的輸入輸出。
 
 SD 卡總共有 8 個寄存器,用于設定或表示 SD 卡信息,其只能通過對應的命令訪問。SDIO 定義了 64 個命令,每個命令都有特殊意義,可實現某一特定功能。SD 卡接收到命令后,根據命令要求對 SD 卡內部寄存器進行修改,程序控制中只需發送組合命令就可實現 SD 卡的控制以及讀寫操作。
 
2)SD卡引腳
S:電源供給 I:輸入 O:采用推拉驅動的輸出 PP:采用推拉驅動的輸入輸出
 
3)SDIO 總線
① 總線拓撲
SD 卡一般支持 SDIO 和 SPI 兩種接口,STM32F42x系列控制器的SDIO是不支持 SPI 通信模式的,如需 SPI 通信只能使用 SPI 外設。
 
SD 卡使用 9-pin 接口通信,其中 3 根電源線、1 根時鐘線、1 根命令線和 4 根數據線。
 CLK:時鐘線,由 SDIO 主機產生,即由 STM32 控制器輸出
 CMD:命令控制線,SDIO主機通過該線發送命令控制SD卡,若命令要求SD卡提供應答(響應),SD卡也通過該線傳輸應答信息
 D0-3:數據線,傳輸讀寫數據,SD卡可將 D0 拉低表示忙狀態
 VDD、VSS1、VSS2:電源和地信號
無論SDIO是從主機控制器向 SD 卡傳輸,還是從 SD 卡向主機控制器傳輸,都只以 CLK 時鐘線的上升沿為有效。SD 卡操作過程使用兩種不同頻率的時鐘同步數據:識別卡階段時鐘頻率 FOD(最高為 400kHz)和數據傳輸模式下時鐘頻率 FPP(默認最高為 25MHz,若通過相關寄存器配置使 SDIO 工作在高速模式,此時最高頻率為 50MHz)。
② 總線協議
SD 總線通信是基于命令和數據傳輸的。通訊由一個起始位(“0”),由一個停止位(“1”)終止。SD 通信一般是主機發送一個命令(Command),從設備在接收到命令后作出響應(Response),如需會有數據(Data)傳輸參與。
 SD 總線的基本交互是命令與響應交互。
 主機向 SD 卡寫入數據塊操作:
 
 SD 數據是以塊(Black)形式傳輸的,SDHC 卡數據塊長度一般為 512 字節,數據可從主機到卡,也可從卡到主機。數據塊需要 CRC 位來保證數據傳輸成功,CRC 位由 SD卡系統硬件生成。STM32 控制器可以控制使用單線或 4 線傳輸。
③ 命令
SD 命令由主機發出,以廣播命令和尋址命令為例,廣播命令是針對與 SD 主機總線連接的所有從設備發送的,尋址命令是指定某個地址設備進行命令傳輸。
 SD 命令格式固定為 48bit,都是通過 CMD 線連續傳輸的(數據線不參與)。
 
④ 響應
響應由 SD 卡向主機發出,部分命令要求 SD 卡作出響應,其多用于反饋 SD 卡的狀態。SDIO 總共有 7 個響應類型(R1~R7),其中 SD 卡沒有 R4、R5 類型響應。特定的命令對應有特定的響應類型,比如當主機發送 CMD3 命令時,可得到響應 R6。SD 卡的響應通過 CMD 線連續傳輸,根據響應內容大小可分為短響應和長響應。短響應是 48bit 長度,只有 R2 類型是長響應,其長度為 136bit。
4)STM32 的 SDIO 功能框圖
STM32 控制器有一個 SDIO,由兩部分組成:SDIO 適配器和 AHB 接口。SDIO 適配器提供 SDIO 主機功能,可提供 SD 時鐘、發送命令和進行數據傳輸;AHB 接口用于控制器訪問 SDIO 適配器寄存器,可產生中斷和 DMA 請求信號。
2. SD卡讀取
1)工程下載
百度云盤:STM32cube配置FATFS模式SPI讀寫SD卡.zip
 提取碼:e63q
2)代碼修改
main.c程序
char SD_FileName[] = "hello.txt"; uint8_t WriteBuffer[] = "姝華 6319****0710\r\n"; while (1){ WritetoSD(WriteBuffer,sizeof(WriteBuffer)); HAL_Delay(500);//WriteBuffer[0] = WriteBuffer[0] +10;//WriteBuffer[1] = WriteBuffer[1] +10;write_cnt ++;while(write_cnt > 5){ printf(" while \r\n");HAL_Delay(500);} /* USER CODE END WHILE *//* USER CODE BEGIN 3 */}3)硬件操作
| CS | PA4 | 
| SCK | PA5 | 
| MISO | PA6 | 
| MOSI | PA7 | 
硬件連接圖
 打開mcuisp軟件,開始燒錄.hex文件
3)實際效果
打開串口調試助手
 
串口收到數據,其中包括總內存、可使用內存及已使用內存、SD卡初始化成功、掛載成功、文件寫入成功等顯示。
 程序一共寫入六次文件,寫入完成后將每過0.5秒輸出一個while。
使用讀卡器打開SD卡
 打開HELLO.txt文件
三、實驗總結
在本次實驗過程中,我學會了如何使用Altium Designer繪制stm32最小系統的電路原理圖,并在此基礎上完成了STM32+SD卡的系統原理圖設計,同時我還學會了如何使用STM32F103完成對SD卡的數據讀取。使用Altium Designer繪制原理圖并不困難,只是需要格外細心,避免器件選取錯誤。而使用STM32F103完成對SD卡的數據讀取其實也比較容易,主要是硬件操作難以出來結果,也需要耐心操作。總而言之,此次實驗不僅提高了我的動手操作能力,還加深了我對電路原理圖繪制和SD卡協議原理的認識。
四、參考資料
1、零死角玩轉STM32—F103指南者.pdf
 2、STM32用cube配置FATFS模式下SPI讀寫SD卡
 3、基于 Altium Designer18 繪制 STM32+SD 卡的電路原理圖
 4、安裝 Altium Designer18 并用其繪制 stm32 最小系統的電路原理圖
總結
 
                            
                        - 上一篇: (十)瑞芯微rk3568 中qt工程ff
- 下一篇: 应用密码学(张仕斌)第四章
