Вы находитесь на странице: 1из 10

Ting Vit | English

ng Nhp |

Trang ch |

Sn phm |

T vn k thut |

M lp lp trnh ARM |

Lin lc Din | n |

Kho st

Lp trnh iu khin MMC/SD card vi board STM32-GEM3M trn nn TOPPERS/ASP Chuyn mc 1. Gii thiu MMC/SD card Tin tc Kin thc Phn cng Phn mm nhng H iu hnh Cng c D n Mc ch MMC l vit tt ca MultiMedia Card. y l loi th nh s dng b nh NAND flash lu tr d liu c gii thiu ln u vo nm 1997 bi Siemens AG v SanDisk. i vi cc ng dng nhng mc vi iu khin, MMC/SD card l s la chn thch hp cho cc ng dng cn lu tr d liu v kt ni phn cng vi th MMC/SD n gin, h tr giao tip SPI, ng thi dung lng b nh ln(c th ln ti 32GBs). B nh ca th MMC/SD c t chc dng block, tng t nh cng(hardisk) trong my tnh. Do vy cng nh cng, MMC/SD s dng tp lnh ATA giao tip vi phn mm iu khin.
Tc gi: ARM VietNam

Mt s c im khi th MMC/SD hot ng ch SPI + Truyn d liu ng b trn 3 tn hiu: CLK, DI, DO. + Kch hot th thng qua tn hiu : Chip Select(CS). + Tn s hot ng t 0-20MHz. + H tr truy cp Single Block v Multi Block. + S kt ni

Th t chn 1 2 3 4 5 6 7 8 9

Chn kt ni CS DI VSS VDD BCLK VSS2 DO -

Loi Input Input/Push Pull Input Output/Push Pull

M t Chip Select Data Input

Clock Source Data Output

Khi hot ng ch SPI, cc lnh iu khin v d liu c truyn chung trn 2 tn hiu DI v DO Khi c d liu t th

Khi ghi d liu xung th

2. FATFS FatFS l b m ngun min ph h tr nh dng FAT(File Allocation Table) c s dng rng ri trong h iu hnh Windows. T chc ca FatFS c m t nh sau

FatFS s cung cp giao din cc hm c bn thc thi cc thao tc file trn th MMC/SD tng t nh lp trnh file trn my tnh. + FatFS h tr cc kiu format FAT12, FAT16, FAT32. + Cc hm giao din lp trnh: f_mount, f_open, f_close, f_read, f_write,f_lseek, f_sync, f_opendir, f_readdir, f_getfree, f_stat, f_mkdir, f_untrnk, f_chmod, f_rename, f_mkfs. FatFS gm 2 phn chnh l phn FAT bao gm cc hm lin quan n File Allocation Table, v phn ATA lin quan n x l cc lnh ATA giao tip vi th nh. T chc file chnh ca FatFs gm:

+ file ff.c: gm cc hm h tr FAT. + file ata.c: gm cc hm giao tip ATA command. giao tip vi phn iu khin (driver) ca th MMC/SD, FatFS yu cu 5 hm giao din + disk_initialize: hm khi to kt ni ti th MMC/SD, ng thi kch hot cho th trng thi sn sng hot ng. + disk_write: ghi d liu vo mt vng sector nht nh. + disk_read: c d liu t mt vng sector cho trc. + disk_status: ly trng thi ca th. + disk_ioctl: cc hm x l cc yu cu khc s c b tr x l y. Kin trc ca FatFS n gin do rt tin cho vic port sang mt h nhng khc. Ngi dng khng cn c kin thc su v FAT vn c th s dng FatFS vo h thng ca mnh. 3. Giao tip vi th MMC/SD Th MMC/SD c 4 ch hot ng l: InActive, Card Identification, Data Transfer, Interrupt. Thng thng th s hot ng hai ch Card Identification v Data Transfer. giao tip trao i d liu vi th MMC/SD, vi iu khin phi pht lnh iu khin xung th. nh dng lnh MMC c t chc gm 48 bit nh sau V tr bit ln Gi tr M t 47 1 0 Start bit 46 1 1 Transmission bit [45-40] 6 x Command index [39-8] 32 x Argument [7-1] 7 x CRC7 0 1 1 End bit

ch SPI, checksum lun c gi tr l 0xFE ngoi tr lc khi ng v lc ny tnh nng tnh checksum vn cn hot ng. Khi nhn lnh t vi iu khin, th MMC/SD lun tr li li bng 1 byte. Nu gi tr tr v l 0xFF c ngha l th bn. Cc lnh MMC/SD thng gp M lnh K hiu M t

Reset th v trng thi idle Yu cu th gi ni dung thng tin ca CMD1 SEND_OP_CODE Operating Condition Regiters Yu cu th gi thng tin cc thanh ghi CMD8 SEND_EXT_CSD CSD(Card Specific Data) di dng block d liu. Yu cu th gi thng tin c th ca thanh CMD9 SEND_CSD ghi CSD. Yu cu gi cc thng tin CID(Card CMD10 SEND_CID Information Data). CMD12 STOP_TRANSMISSION Ngng trao i d liu Thit lp ln tnh theo byte ca mt block CMD16 SET_BLOCKLEN d liu, gi tr mc ny c lu trong CSD CMD17 READ_SINGLE_BLOCK c mt block d liu c nhiu block d liu. S lng block CMD18 READ_MULTIPLE_BLOCK c thit lp bi lnh CMD23 Thit lp s lng block d liu ghi hoc CMD23 SET_BLOCK_COUNT c. CMD24 WRITE_BLOCK Ghi mt block d liu. Ghi nhiu block d liu. S lng block CMD25 WRITE_MULTIPLE_BLOCK c thit lp bi lnh CMD23 Thng bo cho th nh lnh tip theo l lnh CMD55 APP_CMD ring ca ng dng ch khng phi l lnh chun ca MMC. CMD0 GO_IDLE_STATE 4. Porting FatFS vo board STM32-GEM3M-2 Nh phn tch trn, chng ta ch cn ch vo 5 hm giao din vi th MMC/SD ca FatFS. Cc hm ny s trc tip gi n cc hm iu khin phn cng ta thng hay gi l driver trao i d liu trc tip vi th.

(*): disk_status khng cn thit phi ci t. Nh vy chng ta ch cn ci t cc hm khi Driver ph hp vi phn cng ca board STM32-GEM3M-2 l c. + hm power_on(): nhim v hm ny l thit lp cc chn tn hiu ra ca STM32 cho ph hp vi kt ni SPI ti th. + hm power_off(): gii phng cc thit lp trong hm power_on(). + hm send_cmd(): gi lnh xung th theo ng nh dng lnh MMC/SD c m t trong bng 1. /* Send command packet */ xmit_spi(cmd); */ xmit_spi((BYTE)(arg >> 24)); xmit_spi((BYTE)(arg >> 16)); xmit_spi((BYTE)(arg >> 8)); xmit_spi((BYTE)arg); n = 0x01; /* Start + Command index

/* Argument[31..24] */ /* Argument[23..16] */ /* Argument[15..8] */ /* Argument[7..0] */ /* Dummy CRC + Stop */

if (cmd == CMD0) n = 0x95; if (cmd == CMD8) n = 0x87; CMD8(0x1AA) */ xmit_spi(n); + hm xmit_datablock(): gi mt khi d liu xung xmit_spi(token); if (token != 0xFD) { wc = 0; do { MMC */ xmit_spi(*buff++); xmit_spi(*buff++); } while (--wc); xmit_spi(0xFF); xmit_spi(0xFF); resp = rcvr_spi(); */ if ((resp & 0x1F) != 0x05) with error */ return 0; } + hm rcvr_datablock(): do { /* Wait for data packet in timeout of 200ms */ token = rcvr_spi(); #ifdef SUPPORT_TIMEOUT

/* Valid CRC for CMD0(0) */ /* Valid CRC for

/* Xmit data token */ /* Is data token */

/* Xmit the 512 byte data block to

/* CRC (Dummy) */

/* Reveive data response

/* If not accepted, return

} while ((token == 0xFF) && Timer1); #else } while ((token == 0xFF)); #endif if(token != 0xFE) return 0; do { /* If not valid data token, retutn with error */

/* Receive the data block into buffer */ rcvr_spi_m(buff++); rcvr_spi_m(buff++); rcvr_spi_m(buff++); rcvr_spi_m(buff++);

} while (btr -= 4); rcvr_spi(); rcvr_spi(); Trc khi nhn d liu, kim tra xem th MMC/SD c ang bn hay khng + hm xmit_spi(): #define SPI_SD #define xmit_spi(dat) SPI1 sd_raw_rw_spi(dat) /* Discard CRC */

BYTE sd_raw_rw_spi(BYTE b_data) { BYTE Data = 0; /* Wait until the transmit buffer is empty */

//while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); /* Send the byte */ SPI_I2S_SendData(SPI_SD, b_data); /* Wait until a data is received */ while (SPI_I2S_GetFlagStatus(SPI_SD, SPI_I2S_FLAG_RXNE) == RESET); /* Get the received data */ Data = SPI_I2S_ReceiveData(SPI_SD); /* Return the shifted data */ return Data; } + hm rcvr_spi(): static BYTE rcvr_spi (void) { return sd_raw_rw_spi(0xFF); } 4. Kt lun FatFS vi m ngun nh gn, r rng cung cp kh nng tuyt vi truy cp file di nh dng FAT. Kin trc ca FatFS rt ph hp vi cc ng dng nhng, tnh kh chuyn(port) cho php ngi pht trin s dng li m ngun trn nhiu nn tng phn cng khc nhau. Ngi lp trnh khng cn phi hiu r v nh dng FAT vn c th s dng thnh tho b m ngun ny trong cc ng dng c iu khin th MMC/SD ca mnh. y chnh l li ch ln nht ca cc middleware nh FatFS. M ngun tham kho c th download ti y.

Th vin m ngun m cho SMT32-OpenCMX (Phn 1) Lp trnh nh dng FAT File trong SD Card vi STM32 Giao tip c bn MMC/SD Card vi STM32 Lp trnh LCD 16x2 ch 4-bits vi STM32 Chuyn code t ARM7 ln Cortex-M3 (Phn 1) 24 gi lp trnh vi STM32 - Lp trnh ADC 24 gi lp trnh vi STM32 - Lm quen vi GPIO Lp trnh I/O trn th nh Gii thiu v chun CMSIS 2009 ARM.vn group

Вам также может понравиться