0% found this document useful (0 votes)
54 views8 pages

MicroSD SDIO. Fire. QQ Firestm32.blog - Chinaunix.net STM32 ST3.0.0 PC8-SDIO-D0 DATA0 PC9-SDIO-D1 DATA1

MicroSD SDIO. fire. QQ firestm32.blog.chinaunix.net STM32 ST3.0.0 PC8-SDIO-D0 DATA0 PC9-SDIO-D1 DATA1

Uploaded by

nhan tt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views8 pages

MicroSD SDIO. Fire. QQ Firestm32.blog - Chinaunix.net STM32 ST3.0.0 PC8-SDIO-D0 DATA0 PC9-SDIO-D1 DATA1

MicroSD SDIO. fire. QQ firestm32.blog.chinaunix.net STM32 ST3.0.0 PC8-SDIO-D0 DATA0 PC9-SDIO-D1 DATA1

Uploaded by

nhan tt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.

com

MicroSD व˄SDIO ῵ᓣ˅ᅲ偠

԰㗙 fire

E-Mail [email protected]

QQ 313303034

मᅶ firestm32.blog.chinaunix.net

⹀ӊᑇৄ 䞢☿ STM32 ᓔথᵓ

ᑧ⠜
⠜ᴀ ST3.0.0

ᅲ偠ᦣ䗄˖MicroSD व(SDIO ῵ᓣ)⌟䆩ᅲ偠ˈ≵᳝䎥᭛ӊ㋏㒳ˈাᰃऩ㒃ഄ䇏 block


ᑊᇚ⌟䆩ֵᙃ䗮䖛Іষ 1 ೼⬉㛥ⱘ䍙㑻㒜ッϞ ᠧॄߎᴹDŽ

⹀ӊ䖲᥹˖PC8-SDIO-D0 ˖DATA0

PC9-SDIO-D1 ˖DATA1

PC10-SDIO-D2 ˖DATA2

PC11-SDIO-D3 ˖CD/DATA3

PC12-SDIO-CLK˖CLK

PD2-SDIO-CMD ˖CMD

ᑧ᭛ӊ ˖startup/start_stm32f10x_hd.c

CMSIS/core_cm3.c

CMSIS/system_stm32f10x.c

FWlib/stm32f10x_gpio.c

FWlib/stm32f10x_rcc.c

FWlib/stm32f10x_usart.c

FWlib/stm32f10x_sdio.c

FWlib/stm32f10x_dma.c

FWlib/misc.c
1/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

⫼᠋᭛ӊ: USER/main.c

USER/stm32f10x_it.c

USER/usart.c

USER/sdcard.c

䞢☿ STM32 ᓔথᵓ MicroSD व⹀ӊॳ⧚೒˖

SDIO ㅔҟ->

䞢☿ STM32 ᓔথᵓⱘ CPU ( STM32F103VET6 )‫݋‬᳝ϔϾ SDIO ᥹ষDŽ


SD/SDIO/MMC Џᴎ᥹ষৃҹᬃᣕ MMC व㋏㒳㾘㣗 4.2 ⠜Ёⱘ 3 Ͼϡৠⱘ᭄᥂ᘏ㒓῵
ᓣ˖1 ԡ(咬䅸)ǃ4 ԡ੠ 8 ԡDŽ೼ 8 ԡ῵ᓣϟˈ䆹᥹ষৃҹՓ᭄᥂Ӵ䕧䗳⥛䖒ࠄ

2/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

48MHzˈ䆹᥹ষ‫ݐ‬ᆍ SD ᄬ‫ټ‬व㾘㣗 2.0 ⠜DŽSDIO ᄬ‫ټ‬व㾘㣗 2.0 ⠜ᬃᣕϸ⾡᭄᥂ᘏ


㒓῵ᓣ˖1 ԡ(咬䅸)੠ 4 ԡDŽ

Ⳃࠡⱘ㢃⠛⠜ᴀা㛑ϔ⃵ᬃᣕϔϾ SD/SDIO/MMC 4.2 ⠜ⱘवˈԚৃҹৠᯊᬃᣕ໮


Ͼ MMC 4.1 ⠜៪Пࠡ⠜ᴀⱘवDŽ䰸њ SD/SDIO/MMCˈ䖭Ͼ᥹ষᅠܼϢ CE-ATA ᭄ᄫ
ण䆂⠜ᴀ 1.1 ‫ݐ‬ᆍDŽ

ᴀᅲ偠⫼ⱘᰃ MicroSD व 1 ԡ( 咬䅸 )῵ᓣˈ䗳⥛Ў 1M/SˈMicroSD ⱘᆍ䞣Ў


1GDŽ

ᅲ偠䆆㾷->

佪‫ܜ‬೼Ꮉ⿟Ё⏏ࡴ៥Ӏ᠔䳔㽕ⱘᑧ᭛ӊ˖

FWlib/stm32f10x_gpio.c

FWlib/stm32f10x_rcc.c

FWlib/stm32f10x_usart.c

FWlib/stm32f10x_sdio.c

FWlib/stm32f10x_dma.c

FWlib/misc.c

✊ৢ೼ stm32f10x_conf.h 䖭Ͼ༈᭛ӊЁᇚ⫼ࠄⱘᑧⱘ༈᭛ӊⱘ⊼䞞এᥝ˖

1. /* Includes ------------------------------------------------------------------
*/
2. /* Uncomment the line below to enable peripheral header file inclusion */
3. /* #include "stm32f10x_adc.h" */
4. /* #include "stm32f10x_bkp.h" */
5. /* #include "stm32f10x_can.h" */
6. /* #include "stm32f10x_crc.h" */
7. /* #include "stm32f10x_dac.h" */
8. /* #include "stm32f10x_dbgmcu.h" */
9. #include "stm32f10x_dma.h"
10. /* #include "stm32f10x_exti.h" */
11. /*#include "stm32f10x_flash.h"*/
12. /* #include "stm32f10x_fsmc.h" */
13. #include "stm32f10x_gpio.h"
14. /* #include "stm32f10x_i2c.h" */
15. /* #include "stm32f10x_iwdg.h" */
16. /* #include "stm32f10x_pwr.h" */
17. #include "stm32f10x_rcc.h"
18. /* #include "stm32f10x_rtc.h" */
19. #include "stm32f10x_sdio.h"
20. /* #include "stm32f10x_spi.h" */
21. /* #include "stm32f10x_tim.h" */
22. #include "stm32f10x_usart.h"
23. /* #include "stm32f10x_wwdg.h" */
24. #include "misc.h" /* High level functions for NVIC and SysTick (add-
25. on to CMSIS functions) */

䜡㕂ᅠ䳔㽕⫼ࠄⱘ༈᭛ӊПৢˈ៥ӀᇚҢ main ߑ᭄ᓔྟߚᵤ˖

3/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

1. /*
2. * ߑ᭄ৡ˖main
3. * ᦣ䗄 ˖᮴
4. * 䕧ܹ ˖᮴
5. * 䕧ߎ ˖᮴
6. */
7. int main(void)
8. {
9. /* config the sysclock to 72M */
10. SystemInit();
11.
12. /* USART1 config */
13. USART1_Config();
14.
15. /* Interrupt Config */
16. NVIC_Configuration();
17.
18. printf( "\r\n 䖭ᰃϔϾ MicroSD वᅲ偠(≵᳝䎥᭛ӊ㋏㒳)......... " );
19.
20. /*-------------------------- SD Init ----------------------------- */
21. Status = SD_Init();
22.
23. if (Status == SD_OK)
24. {
25. /*----------------- Read CSD/CID MSD registers ------------------*/
26. printf( " \r\n SD_Init is ok " );
27. Status = SD_GetCardInfo(&SDCardInfo);
28. }
29.
30. //printf( " \r\n SD_GetCardInfo Status is: %d ", Status );
31. printf( " \r\n CardType is ˖%d ", SDCardInfo.CardType );
32. printf( " \r\n CardCapacity is ˖%d ", SDCardInfo.CardCapacity );
33. printf( " \r\n CardBlockSize is ˖%d ", SDCardInfo.CardBlockSize );
34. printf( " \r\n RCA is ˖%d ", SDCardInfo.RCA);
35. printf( " \r\n ManufacturerID is ˖%d ", SDCardInfo.SD_cid.ManufacturerID )
;
36.
37. if (Status == SD_OK)
38. {
39. printf("\r\n SD_GetCardInfo is ok ");
40. /*----------------- Select Card --------------------------------*/
41. Status = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));
42. }
43.
44. if (Status == SD_OK)
45. {
46. printf(" \r\n SD_SelectDeselect is ok ");
47. // SDIO_BusWide_4b Ӯ䖯ܹ⅏ᕾ⦃,㟇Ҟ䖬᳾㾷‫އ‬
48. Status = SD_EnableWideBusOperation(SDIO_BusWide_1b);
49. }
50.
51. /*------------------- Block Erase -------------------------------*/
52. if (Status == SD_OK)
53. {
54. /* Erase NumberOfBlocks Blocks of WRITE_BL_LEN(512 Bytes) */
55. Status = SD_Erase(0x00, (BlockSize * NumberOfBlocks));
56. }
57.
58. if (Status == SD_OK)
59. {
60. printf(" \r\n SD_Erase is ok ");
61. Status = SD_SetDeviceMode(SD_DMA_MODE);
62. }
63.
64. if (Status == SD_OK)
65. {
66. printf(" \r\n SD_SetDeviceMode is ok ");
67. // 4bit ῵ᓣᯊӮ‫ذ‬೼䖭䞠њˈ䖯ܹ⅏ᕾ⦃ˈ1bit ῵ᓣᯊ߭ৃҹ䇏প៤ࡳ
68. Status = SD_ReadMultiBlocks(0x00, Buffer_MultiBlock_Rx, BlockSize, NumberO
fBlocks);
69. }
70.
71. if (Status == SD_OK)
72. {
4/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

73. printf(" \r\n SD_ReadMultiBlocks is ok ");


74. EraseStatus = eBuffercmp(Buffer_MultiBlock_Rx, MultiBufferWordsSize);
75. printf( " \r\n eBuffercmp EraseStatus is %d ", EraseStatus );
76. }
77.
78. /*------------------- Block Read/Write --------------------------*/
79. /* Fill the buffer to send */
80. Fill_Buffer(Buffer_Block_Tx, BufferWordsSize, 0x12345678);
81.
82.
83. if (Status == SD_OK)
84. {
85. /* Write block of 512 bytes on address 0 */
86. Status = SD_WriteBlock(0x00, Buffer_Block_Tx, BlockSize);
87. }
88.
89. if (Status == SD_OK)
90. {
91. printf( " \r\n SD_WriteBlock is ok " );
92. /* Read block of 512 bytes from address 0 */
93. Status = SD_ReadBlock(0x00, Buffer_Block_Rx, BlockSize);
94. }
95.
96. if (Status == SD_OK)
97. {
98. printf(" \r\n SD_ReadBlock is ok ");
99. /* Check the corectness of written dada */
100. TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, Buffe
rWordsSize);
101. }
102.
103. if (TransferStatus1 == PASSED)
104. {
105. /* ‫ݭ‬䖯এⱘؐ੠䇏ߎᴹⱘؐⳌৠ */
106. printf( "\r\n Single Block Read/Write is ok " );
107. }
108.
109. /*--------------- Multiple Block Read/Write ---------------------*/
110. /* Fill the buffer to send */
111. Fill_Buffer(Buffer_MultiBlock_Tx, MultiBufferWordsSize, 0x0);
112.
113. if (Status == SD_OK)
114. {
115. /* Write multiple block of many bytes on address 0 */
116. Status = SD_WriteMultiBlocks(0x00, Buffer_MultiBlock_Tx, BlockSize,
NumberOfBlocks);
117. }
118.
119. if (Status == SD_OK)
120. {
121. /* Read block of many bytes from address 0 */
122. Status = SD_ReadMultiBlocks(0x00, Buffer_MultiBlock_Rx, BlockSize,
NumberOfBlocks);
123. }
124.
125. if (Status == SD_OK)
126. {
127. /* Check the corectness of written dada */
128. /* ‫ݭ‬䖯এⱘؐ੠䇏ߎᴹⱘؐⳌৠ */
129. TransferStatus2 = Buffercmp(Buffer_MultiBlock_Tx, Buffer_MultiBlock
_Rx, MultiBufferWordsSize);
130. }
131.
132. if ( TransferStatus2 == PASSED )
133. {
134. printf( " \r\n Multiple Block Read/Write is ok " );
135. }
136.
137. printf(" \r\n ད⍜ᙃ˖MicroSD व䇏‫⌟ݭ‬䆩៤ࡳ \r\n ");
138.
139. while (1)
140. {
141. }
142. } /* end of main */

5/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

main ߑ᭄᳝⚍䭓ˈԚ䅸ⳳߚᵤϟ䖬ᰃᕜད⧚㾷ⱘˈ໻ӭ㒭⚍㗤ᖗˈ⫼ࠄⱘᕜ໮䛑
ᰃᑧ᪡԰ˈ䛑ᰃ ST ⱘᎹ⿟ᏜЎ⫼᠋‫ݭ‬དⱘDŽ

佪‫ˈܜ‬៥Ӏ䖬ᰃϔབ᮶ᕔഄ‫ܜ‬䇗⫼៥Ӏⱘᑧߑ᭄ SystemInit();ᇚ៥Ӏⱘ㋏㒳ᯊ䩳
䆒㕂Ў 72MHZDŽߑ᭄ USART1_Config();⫼ᴹ߱ྟ࣪៥Ӏ㽕⫼ࠄⱘІষDŽ݇Ѣ䖭ϸϾߑ᭄
ⱘ䆺㒚䆆㾷ৃখ㗗ࠡ䴶ⱘᬭ⿟ˈ䖭䞠ϡ೼䆺䗄DŽ

NVIC_Configuration();⫼ᴹ䆒㕂 SDIO ⱘЁᮁӬ‫ܜ‬㑻ˈ಴Ў SDIO ᳝ϝ⾡Ꮉ԰῵ᓣ˖

SD_DMA_MODEǃSD_POLLING_MODEǃSD_INTERRUPT_MODEˈ݊ЁᎹ԰೼Ёᮁ῵ᓣᯊህ䳔㽕䆒㕂Ё

ᮁӬ‫ܜ‬㑻ˈᴀᅲ偠⫼ⱘᰃ SDIO ⱘ DMA ῵ᓣˈ᠔ҹᴀᅲ偠ϡ⫼䇗⫼䖭Ͼߑ᭄гৃҹˈ


䇗⫼њг᮴᠔䇧DŽ

᥹ϟᴹⱘҷⷕᰃϢ MicroSD वⱘ᪡԰᳝݇ⱘˈϢ MicroSD व᳝݇ⱘߑ᭄䛑೼


sdcard.c 䖭Ͼ᭛ӊЁᅲ⦄ˈsdcard.c ϡᰃᑧ᭛ӊˈ㗠ᰃ䳔㽕⫼᠋㓪‫ⱘݭ‬DŽ

1-> 佪‫ܜ‬䇗⫼ SD_Init();⫼Ѣ߱ྟ࣪ MicroSD वˈՓव໘Ѣህ㒾⢊ᗕ(‫ޚ‬໛Ӵ䕧᭄

᥂)DŽ

2->߱ྟ࣪ MicroSD व៤ࡳПৢˈ䇗⫼ߑ᭄ SD_GetCardInfo(&SDCardInfo);ᴹ㦋

পϢवⱘሲᗻ᳝݇ⱘֵᙃDŽ㋻᥹ⴔ䗮䖛Іষᇚ䖭ѯֵᙃ೼⬉㛥ⱘ䍙㑻㒜ッЁᠧ
ॄߎᴹDŽ

3->㦋পࠄवⱘℷ⹂ֵᙃৢˈ䇗⫼ߑ᭄

SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));ᴹ䗝Ё䖭ᓴवDŽ

4->⹂ᅮདⳂᷛवПৢˈ䇗⫼ߑ᭄ SD_EnableWideBusOperation(SDIO_BusWide_1b);

䆒ᅮवⱘ᭄᥂ԡⱘᆑᑺˈ䖭䞠䆒㕂Ў 1 ԡˈП᠔ҹ䆒㕂Ў 1 ԡ㗠ϡᰃ 4 ԡˈᰃ಴

Ў 4 ԡ῵ᓣ៥䖬≵᳝䇗䆩៤ࡳˈҡ䳔ࡾ࡯ਔʽ

5->㋻᥹ⴔህ䇗⫼ߑ᭄ SD_SetDeviceMode(SD_DMA_MODE);䆒㕂 SDIO ⱘᎹ԰῵ᓣ

Ў DMA ᮍᓣDŽ

6/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

6->ࠄњ䖭䞠Ϣव᳝݇ⱘ߱ྟ࣪䛑Ꮖᅠ៤ˈ‫؛‬བ⿟ᑣ㛑䖤㸠ࠄ䖭䞠ⱘ䆱ˈवⱘ᪡԰෎

ᴀϞᏆ㒣៤ࡳњϔञDŽ

7->Block Read/Write ੠ Multiple Block Read/Write ⌟䆩ˈᇚ᭄᥂‫ࠄݭ‬व䞠䴶এˈ‫ݡ‬


ᇚ᭄᥂䇏ߎᴹˈབᵰ‫ݭ‬䖯এⱘ੠䇏ߎᴹⱘ᭄᥂ⳌৠˈेЎ៤ࡳDŽ

8->᳔ৢᠧॄ䇗䆩ֵᙃDŽ

⊼ᛣ˖䖭Ͼ՟⿟ᰃ≵᳝䎥᭛ӊ㋏㒳ⱘˈ㗠ᰃⳈ᥹ህএ䇏वⱘ blockˈ䖭ḋⱘ䆱ህӮ⸈
ണवⱘߚऎˈ೼ᅲ偠ᅠ៤ПৢˈԴ‫ݡ‬ᡞवᦦࠄ⬉㛥Ϟᯊˈ⬉㛥Ӯᦤ⼎Դ㽕䞡
ᮄ߱ྟ࣪वˈ䖭ᰃℷᐌᛇ䈵ˈᑊϡᰃᴀᅲ偠ᡞԴⱘवᓘണњDŽԚ䎥᭛ӊ㋏㒳
ᯊህϡӮߎ⦄䖭⾡䯂乬ˈ᳝݇᭛ӊ㋏㒳ⱘ᪡԰ᇚ೼ϟϔ䆆ⱘᬭ⿟Ё䆆㾷DŽ

7/8
䞢☿ stm32 ᓔথᵓ⎬ᅱᅬᮍϧप˖http://firestm32.taobao.com

ᅲ偠⦄䈵->

ᇚ䞢☿ STM32 ᓔথᵓկ⬉(DC5V)ˈᦦϞ JLINKˈᦦϞІষ㒓(ϸ༈䛑ᰃ↡ⱘѸঝ


㒓)ˈᦦϞ MicroSD व( ៥⫼ⱘᰃ 1G )ˈᠧᓔ䍙㑻㒜ッˈ䜡㕂䍙㑻㒜ッЎ 115200 8-N-
1ˈᇚ㓪䆥དⱘ⿟ᑣϟ䕑ࠄᓔথᵓˈेৃⳟࠄ䍙㑻㒜ッᠧॄߎབϟֵᙃ˖

ᅲ偠䆆㾷ᅠ↩ˈ䞢☿⼱໻ᆊᄺдᛝᖿ^_^DŽ

8/8

You might also like