Mit dem hier vorgestellten Pic Basic Pro Samplecode ist es möglich eine SD Karte, die vorher mit FAT 32 formatiert wurde zu lesen und zu beschreiben.
Das Beispiel stammt aus dem Fundus der der Firma Melab
Copyright 2008 microEngineering Labs, Inc.
PIC Basic, Read/Write SD Card with FAT 32
sdfs3.zip
Version: Copyright 2008 microEngineering Labs, Inc.
PIC Basic, Read/Write SD Card with FAT 32
sdfs3.zip
Version: Copyright 2008 microEngineering Labs, Inc.
sdfs3.zip
Version: Copyright 2008 microEngineering Labs, Inc.
' Name : sdfs3.pbp ' Compiler : PICBASIC PRO Compiler 2.6 (PBPL only) ' Assembler : MPASM ' Target PIC : PIC16F4550 ' Hardware : Schematic available in http://melabs.com/resources/samples/pbp/sdfs3.zip ' Oscillator : 20MHz ' Keywords : SD Card, SD/MMC, FAT16 ' Description : 10/02/08 - PICBASIC PRO 2.50L test program to talk to FAT16 ' formatted MMC/SD cards with PIC18F4550. This is only a test program that ' is part of a larger project. The complete fileset with schematic, includes, ' and details can be found at download: ' http://melabs.com/resources/samples/pbp/sdfs3.zip Define OSC 20 ' 20 MHz oscillator ' Alias PIC pins and registers for SD/MMC card SD_WE Var PORTA.4 ' SD card write protect SD_WE_TRIS Var TRISA.4 ' SD card write protect direction SDI Var PORTB.0 ' SPI data in SDI_TRIS Var TRISB.0 ' SPI data in direction SCL Var PORTB.1 ' SPI clock SCL_TRIS Var TRISB.1 ' SPI clock direction SD_CS Var PORTB.3 ' SD card chip select SD_CS_TRIS Var TRISB.3 ' SD card chip select direction SD_CD Var PORTB.4 ' SD card detect SD_CD_TRIS Var TRISB.4 ' SD card detect direction SDO Var PORTC.7 ' SPI data out SDO_TRIS Var TRISC.7 ' SPI data out direction ' Include the SD/MMC subroutines (found in http://melabs.com/resources/samples/pbp/sdfs3.zip) Include "SDFS.PBP" SDC_UseHardSPI = TRUE ' Use hardware SSP port for SPI. ADCON1 = 15 ' All I/O pins digital Pause 100 ' FSInit initializes the card and reads all the preliminary information from it Gosub FSInit Serout2 PORTC.6, 84, ["Init: ", Dec FAT_error, " ", Dec SDC_status, " ", Dec SDC_response, $d, $a] If (FAT_error != 0) Then Stop ' Display card directory Gosub FINDfirst ' Find first file on card While (FAT_error = 0) Serout2 PORTC.6, 84, [Str FAT_FileName\11, $d, $a] Gosub FINDnext ' Find next file on card Wend ' This section defines a specific short (8.3) filename ' Note that spaces are use in empty elements and must be upper case for Windows FAT_FileName[0] = "T" FAT_FileName[1] = "E" FAT_FileName[2] = "S" FAT_FileName[3] = "T" FAT_FileName[4] = "1" FAT_FileName[5] = " " FAT_FileName[6] = " " FAT_FileName[7] = " " FAT_FileName[8] = "T" FAT_FileName[9] = "X" FAT_FileName[10] = "T" ' Set file time to 8:30:10 and date to 1/1/2008 FAT_seconds = 5 FAT_minutes = 30 FAT_hours = 8 FAT_day = 1 FAT_month = 1 FAT_year = 28 ' Open a file for write FAT_mode = "w" ' Write mode Gosub FSfopen ' Open file pointed to by Byte array FAT_FileName Serout2 PORTC.6, 84, ["Open for write: ", Dec FAT_error, $d, $a] If (FAT_error != 0) Then Stop ' Write to file FAT_src[0] = "A" FAT_src[1] = "B" FAT_src[2] = "C" FAT_count = 3 Gosub FSfwrite Serout2 PORTC.6, 84, [ "Write ", Dec FAT_error, $d, $a] If (FAT_error != 0) Then Stop ' Close file Gosub FSfclose Serout2 PORTC.6, 84, [ "Close ", Dec FAT_error, $d, $a] If (FAT_error != 0) Then Stop ' Open a file for read FAT_mode = "r" ' Read mode Gosub FSfopen ' Open file pointed to by Byte array FAT_FileName Serout2 PORTC.6, 84, ["Open: ", Dec FAT_error, $d, $a] If (FAT_error != 0) Then Stop ' Read and display the whole file FAT_count = 1 ' Read 1 byte to buffer at a time Gosub FSfread While (FAT_error = 0) Serout2 PORTC.6, 84, [FAT_dest[0]] FAT_count = 1 ' Read 1 byte to buffer at a time Gosub FSfread Wend Serout2 PORTC.6, 84, [ "Read: ", Dec FAT_error, $d, $a] ' Delete a file ' Gosub FSremove ' Delete file pointed to by Byte array FAT_FileName ' Serout2 PORTC.6, 84, ["Remove: ", Dec FAT_error, $d, $a] ' If (FAT_error != 0) Then Stop ' Rename a file ' FAT_FileName2 is new name ' FAT_FileName2[0] = "T" ' FAT_FileName2[1] = "E" ' FAT_FileName2[2] = "S" ' FAT_FileName2[3] = "T" ' FAT_FileName2[4] = "2" ' FAT_FileName2[5] = " " ' FAT_FileName2[6] = " " ' FAT_FileName2[7] = " " ' FAT_FileName2[8] = "T" ' FAT_FileName2[9] = "X" ' FAT_FileName2[10] = "T" ' Gosub FSrename ' Rename file pointed to by Byte array FAT_FileName ' Serout2 PORTC.6, 84, ["Rename: ", Dec FAT_error, $d, $a] ' If (FAT_error != 0) Then Stop End