使用環(huán)境(藍(lán)色粗體字為特別注意內(nèi)容) 1、軟件環(huán)境:Keil MDK 5.15 2、硬件環(huán)境:STM32F103C8T6最小系統(tǒng),Micro TF卡 在一個(gè)項(xiàng)目中需要用到SD卡,于是在某寶買(mǎi)了一塊Micro TF卡插槽,SPI驅(qū)動(dòng): 
貌似不用那個(gè)小芯片好像可以用IO口直接驅(qū)動(dòng)TF卡,不知道那個(gè)小芯片干嘛用的,也沒(méi)工夫去追究了,廢話少說(shuō),先來(lái)看接線: 關(guān)于CS/NSS管腳,即我們熟知的片選信號(hào),作為主設(shè)備N(xiāo)SS管腳為高電平,從設(shè)備N(xiāo)SS管腳為低電平。
一開(kāi)始為了性能考慮,打算使用硬件SPI2,后來(lái)發(fā)現(xiàn)速度太快了,SD/TF卡的速度跟不上,調(diào)了半天調(diào)不出來(lái),必須降低APB總線速率: //配置APB1(PCLK1)鐘=AHB 1/2時(shí)鐘 RCC_PCLK2Config(RCC_HCLK_Div4); //72/4=18MHz ,會(huì)降低總線頻率,導(dǎo)致串口不正常!慎用! 但是總線速率一下降,延時(shí)函數(shù),串口通信函數(shù)都會(huì)受影響,于是考慮使用兩種方式實(shí)現(xiàn)即硬件SPI+軟件模擬SPI。 最終使用軟件模擬SPI并且移植SFATS,讀取2G的SD卡成功, 
main函數(shù)如下 /******************************************************************************* * @file SDFatFS/source/main.c ******************************************************************************/ #include 'usart_printf.h' char path[10] = '0:';// SD卡根目錄 char wbuff[] = 'This is FATFS function test\r\n * f_open\r\n * f_write\r\n * f_close\r\n'; // ******************************************************************************* // ******************************************************************************* Hardware_Configuration(); wbuff2[i * 512 + j] = 'A' + i; ffext_read('0:/test/test.ini', wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_READ); ffext_write('0:/test/out.ini', wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_WRITE); // ffext_write('0:CardInfo.txt', wbuff, sizeof(wbuff)-1, FA_OPEN_ALWAYS | FA_WRITE); // ffext_write('0:ffext2.ini', wbuff2, (512*26), FA_OPEN_ALWAYS | FA_WRITE); ffext_read('0:ffext2.ini', wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_READ); ffext_write('0:ffext1.txt', wbuff2, (512 * 26), FA_OPEN_ALWAYS | FA_WRITE);
|