2010年9月23日 星期四

MCS-8051 / 實作 FAT File System 於 SDC/MMC,用來 儲存 大檔案圖片/音樂檔(mp3)--final

近日忙完 ARM-S3C6410 ARM11 的  Bootloader( UBoot ) & OS & Root Filesystem 的移植,及相關 ARM-S3C6410 教學開發板驅動的撰寫。 利用空閒時間 再來實作 MCS-8051 上的 FAT File System ,可用於 SDC/MMC 週邊,利用 SDC/MMC 存儲 大容量的圖片/音樂檔(mp3)的特性,加大 MCS-8051 的容量。


上面的實作技術,在現今業界尚大量使用 MCS-8051 BASE 來做控制,是可以再對 MCS-8051 的應用面加強,我目前採用 FatFs Generic File System Module 來移植到  MCS-8051 。目前 會將 MCS-8051/彩色 LCD 液晶顯示器 解析度 128x128 SCTN 65K色 程式實作( 網址:http://tw.myblog.yahoo.com/yh-chiang/article?mid=977&prev=979&next=966 ) 的圖片改存在 SDC/MMC 上,MCS-8051 再將其讀出  Show 在 LCD 上。


如 FatFs Generic File System Module 的前言所說:FatFs is a generic FAT file system module for small embedded systems. The FatFs is written in compliance with ANSI C and completely separated from the disk I/O layer. Therefore it is independent of hardware architecture. It can be incorporated into low cost microcontrollers, such as AVR, 8051, PIC, ARM, Z80, 68k and etc...。


其架構如下圖:



如上圖所示:FatFs Module 介於 Application 與 Low level disk I/O及RTC 之間,它是一種 Meta 層協定,不牽涉到硬體的控制與Access,比較容易移植。但現在要將其移植到 MCS-8051 上,尚必須完成專屬MCS-8051的 Low level disk I/O及RTC 的移植,這一部份,我在 MCS-8051 開發板上是利用 SD/MMC 裝置, 當然 您也可可以移植到 CF 卡,又或者 您使用的 MCS-8051 開發板的ROM記憶體夠大的話,說不定連 如  DOM 裝置也可以移植成功。


有關在 MCS-8051 開發板上移植適合的 FatFs Module 的 Low level disk I/O及RTC ,因為比較複雜,所以這部份我將在課堂上講解。
而當您成功移植 FatFs Module 與 Low level disk I/O及RTC 到 MCS-8051 開發板上時,您就可以撰寫適當的 Application ,由 MCS-8051 開發板讀寫 SD/MMC 裝置上的卡。這裡我貼上一段 Application CODE 供各位分享。


#include <MCS8051.h>


FATFS fs;
FIL F;
const char filename[] = "test51.txt";
const char dataBuf[] = "Hello CYH^^";
unsigned char i;
volatile FRESULT resV;
UINT bytesWritten;


UINT bytesRead;

unsigned char buf_read[64];


int main( void )
{
  init51();   


 f_mount(0, &fs);
 
 f_open (&F, filename, FA_READ | FA_WRITE | FA_CREATE_ALWAYS); 
 
 f_write (&F, buf1, sizeof (buf1) - 1, &bytesWritten);


 f_lseek (&F, 0 );


 f_read( &F, buf_read, bytesWritten, &bytesRead);
 buf_read[bytesRead] = 0; // 可以使用 Debug Mode 觀察 buf_read, 是否讀寫 SD 成功?
 
 f_close (&F);
 f_mount(0, NULL);


 while( 1 );
    return 0;
}


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...