Trạng thái sẵn sàng
6.6.5 Sử dụng hàm khi định dạng thẻ theo FAT16.
Có 13 hàm mà người dùng có thể sử dụng để quản lý file và thao tác với thẻ. Bảng sau cung cấp 1 cách tổng quan về các hàm.
Tên hàm Ý nghĩa
FSInit Là hàm khởi tạo thẻ, nạp vào MBR (thông tin về phân vùng), nạp vào sector khởi và cập nhật những thông sô hợp lệ cho nó
FSfclose Hàm này cập nhật thông tin file, ngừng lại việc ghi tới entry và giải phóng RAM. Hàm này cũng cập nhật thông tin về mốc thời gian cho file.
FSfoef Hàm phát hiện nếu việc kết thúc của 1 file đã được hoàn thành FSfopen
Nếu file đã tồn tại, FSfopen có thể mở nó để ghi thêm vào từ điểm kêt thúc ơ lần mở trước, xóa nó và tạo một file mới cùng tên để ghi vào hoặc đơn giản chỉ là để đọc file. Nếu file không tồn tại, FSfopen có thể tạo ra nó.
FSfopenpgm Hàm mở một file trên SD card kết hợp với FSFILE structure (stream). Hàm sử dụng đối số đã định nghĩa trong ROM. Hàm cần thiết cho kiến trúc PIC18.
FSfread
Hàm sẽ đọc thông tin từ một file mở tới một bộ đệm. Số byte ghi có thể được định nghĩa bằng các tham số. Nếu FSfread được gọi liên tiếp trên cùng 1 file giống nhau thì quá trình đọc sẽ tiếp tục từ điểm dừng ở lần đọc trước. Hàm này trả lại giá trị của dữ liệu đã đọc.
FSfwrite
Hàm đọc thông tin từ bộ đệm tới 1 file mở. Thuật toán sử dụng là đọc một sector từ vùng dữ liệu trên thẻ tới SRAM. Việc ghi các block với khối dữ liệu lớn, sẽ mất thời gian hơn ta ghi những block giống nhau nhưng block nhỏ. FSremove Hàm tìm kiếm các file cơ sở với tên hợp lệ cho nó. Nếu tìm thấy thì đề mục
thư mục gốc được xóa mặt nạ và đề mục FAT được tẩy. FSremovepgm
Xóa file được xác định bằng tên cho trước. Nếu file đã được mở với FSfopen, nó phải xóa file đó trước và gọi lai FSremovepgm. Tên file phải được định nghĩa ở trong ROM. Chức năng này chỉ cần thiết với PIC18.
FSrewind Hàm thiết lập lại vị trí bắt đầu của file
SetClockVars Hàm được sử dụng trong mode đồng hồ đã đước sử dụng có thiết lập thời gian hiện tại. Ngày giờ sẽ được áp dụng cho file mà đã tạo hoặc sử chữa.
FSmkdir Thao tác với thư mục, hám sẽ tạo một thư muc con trong thư mục hiện thời. FSchdir Thao tác với thư mục, hàm sẽ thay đổi thư mục làm việc hiện thời thành 1 thư
mục được định danh bởi người dùng
FSrmdir Thao tác với thư mục, hàm sẽ xóa thư mục được chỉ định bởi người dùng FSgetcwd Thao tac với thư mục, hàm sẽ trả lại giá trị tên của thư mục đang làm việc hiện
tại tới người dùng
thuộc tính được đặt bởi người dùng. Với mỗi file được chỉ định, tên kích cỡ file, ngày giờ tạo, thuộc tính trong cấu trúc SearchRec sẽ được cập nhật với thông tin file chính xác.
FindFirstpgm Giống với hàm FindFirst, hàm chỉ cần thiết đối với PIC18
FindNext Hàm định vị trí tiếp theo trong thư mục hiện tại sau khi đã gọi các hàm FindFirst hoặc FindFirstpgm
FSformat
Hàm sẽ xóa toàn bộ bảng thư mục gốc và bảng phân bố dữ liệu. Khi người dùng gọi hàm này nó sẽ tạo ra một boot sector mới dựa trên những thông tin lấy từ MBR
FSfprintf Hàm sẽ ghi 1 chuỗi lên file. Ví dụ: Khởi tạo FAT16 và tạo một file.
Đinh dạng MMC với hàm FSinit sau đó gọi hàm FSfopen để tạo 1 file mới, tiếp đến FSfopenpgm được gọi, đây là hàm giống với FSfopen tuy nhiên nó cho phép những thông số ROM. Hàm này thực hiện hành động mở 1 file đã tồn tại trong chế độ đọc. Quá trình tiếp tục với việc đọc 10byte dữ liệu từ file, rồi lại ghi 15 byte tới 1 file mới rồi đóng cả 2 file. Kết thúc công việc là xóa file cũ, để thực hiện được việc xóa file thì phải đảm bảo file đã đươc đóng bằng hàm FSfclose. Đoạn code sau mô tả các công việc trên.
/////////////////////////////////////////////// #include <FSIO.h>
#define bfrsize 5 void main(void){
FSFILE *pOldFile, pNewFile; char myData[20];
char bfr [6];
int bytesRead, bytesWritten; char newFile[] = “newfile.txt”; char writeArg = “w”;
// khoi tao thu vien FAT16, chuan SPI va cac chan co lien quan
// tao 1 file moi
pNewFile = FSfopen (newFile, writeArg); // mo 1 file da ton tai va doc
pOldFile = FSfopenpgm (“myfile.txt”, “r”); if ( pOldFile == NULL )
return 1;
// doc 10 byte du lieu tu file.
bytesRead = FSfread((void*)myData,10,1,pOldFile); bytesRead = FSfread((void *)bfr,1,bfrSize, pOldFile); // ghi 15 byte len file
bytesWritten = FSfwrite((void *) myData, 10, 1,pNewFile); bytesWritten = FSfwrite((void *)bfr,1, bfrSize, pNewFile); // dong tat ca cac file
FSfclose( pOldFile ); FSfclose (pNewFile); //xoa file cu FSremovepgm (“myfile.txt”); } ///////////////////////////////////////////////////////// =====================================================