SDFileSystemSampleCode1
SwordfishUser.SDFileSystemSampleCode1 History
Hide minor edits - Show changes to output
Added lines 1-454:
!!!Sample Code 1 - Demo of most commands in module
=code [=
Device = 18F4620
Clock = 40
Config OSC = HSPLL
// Uses USART, SDFileSystem, Convert and String libraries...
#option SD_SPI = MSSP
#option SD_SPI_SPEED = spiOscDiv4
#option SD_SUPPORT_SUB_DIRECTORIES = True
#option USART_BRGH = True
#option USART_BRG16 = True
Include "USART.bas"
Include "SDFileSystem.bas"
Include "String.bas"
Include "Convert.bas"
Const ClockDiv = _clock * 1000000
Dim MenuOption As String
Dim Timer As TMR1L.AsWord // Alias to Timer1
Dim TimerOn As T1CON.Booleans(0) // Start and stop
Dim TimerInterruptsEnabled As PIE1.Booleans(0) // Enable interrupts
Dim Counter As LongWord
Dim CounterUpper As Counter.Word1
// Timer interrupt handler - every time Timer1 overflows, we
// need to increment the upper word of our big 32 bit counter...
Interrupt OnTimer()
Inc(CounterUpper)
PIR1.0 = 0
End Interrupt
Sub TimerStart()
Timer = 0 // Clear timer one
CounterUpper = 0 // Clear upper count value
TimerOn = True // Start timer
End Sub
Sub TimerStop()
TimerOn = False // Timer off
Counter.Word0 = Timer // Save whats left in timer one
End Sub
// New Line
Sub NewLine()
USART.Write(13,10)
End Sub
// Display line
Sub DisplayLine(pString As String)
Dim Spaces As Byte
USART.Write("* ", pString)
Spaces = 70 - Length(pString)
Repeat
USART.Write(" ")
Dec(Spaces)
Until Spaces = 0
USART.Write("*")
NewLine()
End Sub
// Separator line
Sub SeparatorLine()
Dim Spaces As Byte
Spaces = 74
Repeat
USART.Write("*")
Dec(Spaces)
Until Spaces = 0
NewLine
End Sub
// Display menu
Sub Menu()
DisplayLine("SDFileSystem Test Program Menu - Select Option:")
SeparatorLine()
DisplayLine("A: Init I: OpenFile... Q: DiskMounted Y: Format")
DisplayLine("B: QuickFormat J: DeleteFile... R: DiskSizeKB Z: SerialNumber")
DisplayLine("C: Dir K: FileExists... S: FreeSpaceKB 1: MemoryType")
DisplayLine("D: ChDir... L: DirExists... T: IsOpen 2: FATType")
DisplayLine("E: ChDir(Root) M: MkDir... U: IsRootDir 3: DestroyFormat")
DisplayLine("F: ChDir(Up) N: RmDir... V: RWError 4: FileCount")
DisplayLine("G: NewFile... O: Rename... W: NewFile(1MB) 5: DirCount")
DisplayLine("H: AppendFile... P: DiskFull X: SaveFile...")
SeparatorLine()
End Sub
// Display response for Byte type responses
Sub DisplayResponse(pResponse As Byte)
Select pResponse
Case errOK
DisplayLine(">: Response: errOK")
Case errDiskFull
DisplayLine(">: Response: errDiskFull")
Case errNotFound
DisplayLine(">: Response: errNotFound")
Case errRootDirFull
DisplayLine(">: Response: errRootDirFull")
Case errDirNotEmpty
DisplayLine(">: Response: errDirNotEmpty")
Case errExists
DisplayLine(">: Response: errExists")
Case errInUse
DisplayLine(">: Response: errInUse")
Case errRWError
DisplayLine(">: Response: errRWError")
Case errFileNotOpen
DisplayLine(">: Response: errFileNotOpen")
Case errBeyondEOF
DisplayLine(">: Response: errBeyondEOF")
Case errNoResponse
DisplayLine(">: Response: errNoResponse")
Case errInvalidFormat
DisplayLine(">: Response: errInvalidFormat")
Case errInvalidPath
DisplayLine(">: Response: errInvalidPath")
EndSelect
SeparatorLine()
End Sub
// Display response for Boolean type responses
Sub DisplayResponse(pResponseB As Boolean)
Select pResponseB
Case True
DisplayLine(">: Response: True")
Case False
DisplayLine(">: Response: False")
EndSelect
SeparatorLine()
End Sub
// Display time
Sub DisplayTime()
Dim Time As Float
Time = 4 * Counter / ClockDiv
DisplayLine(">: Time Taken: " + FloatToStr(Time,4,3) + " sec")
SeparatorLine()
End Sub
Function GetName(pPrompt As String) As String * 24
DisplayLine("?: " + pPrompt + ":")
SeparatorLine()
USART.Read(GetName)
End Function
Sub SDCode(pMenuOption As String)
Dim Index As LongWord
Dim Name As String
Dim NameNew As String
Dim FileName As String(13)
Dim Response As Byte
If pMenuOption <> " " Then
SeparatorLine()
DisplayLine(">: Option: " + pMenuOption)
EndIf
SeparatorLine()
Select pMenuOption
Case " " // Menu
Menu()
Case "A" // Init
TimerStart()
DisplayResponse(SD.Init())
TimerStop()
DisplayTime()
Case "B" // QuickFormat
TimerStart()
DisplayResponse(SD.QuickFormat)
TimerStop()
DisplayTime()
Case "C" // Dir
DisplayLine(">: Directory of SD/MMC:")
TimerStart()
FileName = SD.Dir(dirFirst, sdFile)
While FileName <> Null
DisplayLine(">: " + FileName)
FileName = SD.Dir(dirNext, sdFile)
Wend
FileName = SD.Dir(dirFirst, sdDirectory)
While FileName <> Null
DisplayLine(">: " + FileName + " <DIR>")
FileName = SD.Dir(dirNext, sdDirectory)
Wend
TimerStop()
DisplayLine(">: " + DecToStr(SD.FileCount, 2) + " File(s)")
DisplayLine(">: " + DecToStr(SD.DirCount, 2) + " Directory(s)")
SeparatorLine()
DisplayTime()
Case "D" // ChDir
Name = GetName("Enter Directory Name")
TimerStart()
DisplayResponse(SD.ChDir(Name))
TimerStop()
DisplayTime()
Case "E" // ChDir(Root)
TimerStart()
DisplayResponse(SD.ChDir(cdRoot))
TimerStop()
DisplayTime()
Case "F" // ChDir(Up)
TimerStart()
DisplayResponse(SD.ChDir(cdUp))
TimerStop()
DisplayTime()
Case "G" // NewFile
Name = GetName("NewFile - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write("SDFileSystemTest - Section 1 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 300
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "H" // AppendFile
Name = GetName("AppendFile - Enter File Name")
Response = SD.AppendFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write("SDFileSystemTest - Section 2 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 300
SD.CloseFile()
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "I" // OpenFile
Name = GetName("OpenFile - Enter File Name")
Response = SD.OpenFile(Name)
DisplayResponse(Response)
If Response = errOK Then
NewLine()
TimerStart()
Repeat
USART.Write(SD.ReadByte())
Until SD.EOF
SD.CloseFile
TimerStop()
NewLine()
SeparatorLine()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "J" // DeleteFile
Name = GetName("DeleteFile - Enter File Name")
TimerStart()
DisplayResponse(SD.DeleteFile(Name))
TimerStop()
DisplayTime()
Case "K" // FileExists
Name = GetName("FileExists - Enter File Name")
TimerStart()
DisplayResponse(SD.FileExists(Name))
TimerStop()
DisplayTime()
Case "L" // DirExists
Name = GetName("DirExists - Enter Directory Name")
TimerStart()
DisplayResponse(SD.DirExists(Name))
TimerStop()
DisplayTime()
Case "M" // MkDir
Name = GetName("MkDir - Enter Directory Name")
TimerStart()
DisplayResponse(SD.MkDir(Name))
TimerStop()
DisplayTime()
Case "N" // RmDir
Name = GetName("RmDir - Enter Directory Name")
TimerStart()
DisplayResponse(SD.RmDir(Name))
TimerStop()
DisplayTime()
Case "O" // Rename
Name = GetName("Rename - Enter Old File Name")
NameNew = GetName("Rename - Enter New File Name")
TimerStart()
DisplayResponse(SD.Rename(Name, NameNew, sdFile))
TimerStop()
DisplayTime()
Case "P" // DiskFull
TimerStart()
DisplayResponse(SD.DiskFull)
TimerStop()
DisplayTime()
Case "Q" // DiskMounted
TimerStart()
DisplayResponse(SD.DiskMounted)
TimerStop()
DisplayTime()
Case "R" // DiskSizeKB
TimerStart()
DisplayLine(">: Disk Size: " + DecToStr(SD.DiskSizeKB()) + " KB")
TimerStop()
SeparatorLine()
DisplayTime()
Case "S" // FreeSpaceKB
TimerStart()
DisplayLine(">: Free Space: " + DecToStr(SD.FreeSpaceKB()) + " KB")
TimerStop()
SeparatorLine()
DisplayTime()
Case "T" // IsOpen
TimerStart()
DisplayResponse(SD.IsOpen)
TimerStop()
DisplayTime()
Case "U" // IsRootDir
TimerStart()
DisplayResponse(SD.IsRootDir)
TimerStop()
DisplayTime()
Case "V" // RWError
TimerStart()
DisplayResponse(SD.RWError)
TimerStop()
DisplayTime()
Case "W" // NewFile(1MB)
Name = GetName("NewFile(1MB) - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write(".")
Inc(Index)
Until Index > 1048576
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "X" // SaveFile
Name = GetName("SaveFile - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
TimerStart()
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 1 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 2 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 3 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 4 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "Y" // Format
TimerStart()
DisplayResponse(SD.Format(1))
TimerStop()
DisplayTime()
Case "Z" // SerialNumber
TimerStart()
DisplayLine(">: SerialNumber: " + HexToStr(SD.SerialNumber()))
TimerStop()
SeparatorLine()
DisplayTime()
Case "1" // MemoryType
TimerStart()
Select SD.MemoryType()
Case sdMMC Name = "MMC"
Case sdSD Name = "SD"
Case sdSDHC Name = "SDHC"
EndSelect
DisplayLine(">: MemoryType: " + Name)
TimerStop()
SeparatorLine()
DisplayTime()
Case "2" // FATType
TimerStart()
Select SD.FATType()
Case 1 Name = "FAT16"
Case 2 Name = "FAT32"
EndSelect
DisplayLine(">: FATType: " + Name)
TimerStop()
SeparatorLine()
DisplayTime()
Case "3" // DestroyFormat
TimerStart()
DisplayResponse(SD.DestroyFormat)
TimerStop()
DisplayTime()
Case "4" // FileCount
TimerStart()
DisplayLine(">: FileCount: " + DecToStr(SD.FileCount()))
TimerStop()
SeparatorLine()
DisplayTime()
Case "5" // DirCount
TimerStart()
DisplayLine(">: DirCount: " + DecToStr(SD.DirCount()))
TimerStop()
SeparatorLine()
DisplayTime()
Else
DisplayLine(">: Option Not Recognised")
SeparatorLine()
EndSelect
End Sub
// Main program...
SetBaudrate(br115200)
USART.ReadTerminator = #13
DelayMS(1000)
TimerInterruptsEnabled = True // Enable timer interrupts
Enable(OnTimer) // Assign the interrupt handler
SDCode(" ") // Display menu at start, then only with space
NewLine()
While True
USART.Read(MenuOption)
SDCode(Str.Uppercase(MenuOption))
NewLine()
Wend
=]
=code [=
Device = 18F4620
Clock = 40
Config OSC = HSPLL
// Uses USART, SDFileSystem, Convert and String libraries...
#option SD_SPI = MSSP
#option SD_SPI_SPEED = spiOscDiv4
#option SD_SUPPORT_SUB_DIRECTORIES = True
#option USART_BRGH = True
#option USART_BRG16 = True
Include "USART.bas"
Include "SDFileSystem.bas"
Include "String.bas"
Include "Convert.bas"
Const ClockDiv = _clock * 1000000
Dim MenuOption As String
Dim Timer As TMR1L.AsWord // Alias to Timer1
Dim TimerOn As T1CON.Booleans(0) // Start and stop
Dim TimerInterruptsEnabled As PIE1.Booleans(0) // Enable interrupts
Dim Counter As LongWord
Dim CounterUpper As Counter.Word1
// Timer interrupt handler - every time Timer1 overflows, we
// need to increment the upper word of our big 32 bit counter...
Interrupt OnTimer()
Inc(CounterUpper)
PIR1.0 = 0
End Interrupt
Sub TimerStart()
Timer = 0 // Clear timer one
CounterUpper = 0 // Clear upper count value
TimerOn = True // Start timer
End Sub
Sub TimerStop()
TimerOn = False // Timer off
Counter.Word0 = Timer // Save whats left in timer one
End Sub
// New Line
Sub NewLine()
USART.Write(13,10)
End Sub
// Display line
Sub DisplayLine(pString As String)
Dim Spaces As Byte
USART.Write("* ", pString)
Spaces = 70 - Length(pString)
Repeat
USART.Write(" ")
Dec(Spaces)
Until Spaces = 0
USART.Write("*")
NewLine()
End Sub
// Separator line
Sub SeparatorLine()
Dim Spaces As Byte
Spaces = 74
Repeat
USART.Write("*")
Dec(Spaces)
Until Spaces = 0
NewLine
End Sub
// Display menu
Sub Menu()
DisplayLine("SDFileSystem Test Program Menu - Select Option:")
SeparatorLine()
DisplayLine("A: Init I: OpenFile... Q: DiskMounted Y: Format")
DisplayLine("B: QuickFormat J: DeleteFile... R: DiskSizeKB Z: SerialNumber")
DisplayLine("C: Dir K: FileExists... S: FreeSpaceKB 1: MemoryType")
DisplayLine("D: ChDir... L: DirExists... T: IsOpen 2: FATType")
DisplayLine("E: ChDir(Root) M: MkDir... U: IsRootDir 3: DestroyFormat")
DisplayLine("F: ChDir(Up) N: RmDir... V: RWError 4: FileCount")
DisplayLine("G: NewFile... O: Rename... W: NewFile(1MB) 5: DirCount")
DisplayLine("H: AppendFile... P: DiskFull X: SaveFile...")
SeparatorLine()
End Sub
// Display response for Byte type responses
Sub DisplayResponse(pResponse As Byte)
Select pResponse
Case errOK
DisplayLine(">: Response: errOK")
Case errDiskFull
DisplayLine(">: Response: errDiskFull")
Case errNotFound
DisplayLine(">: Response: errNotFound")
Case errRootDirFull
DisplayLine(">: Response: errRootDirFull")
Case errDirNotEmpty
DisplayLine(">: Response: errDirNotEmpty")
Case errExists
DisplayLine(">: Response: errExists")
Case errInUse
DisplayLine(">: Response: errInUse")
Case errRWError
DisplayLine(">: Response: errRWError")
Case errFileNotOpen
DisplayLine(">: Response: errFileNotOpen")
Case errBeyondEOF
DisplayLine(">: Response: errBeyondEOF")
Case errNoResponse
DisplayLine(">: Response: errNoResponse")
Case errInvalidFormat
DisplayLine(">: Response: errInvalidFormat")
Case errInvalidPath
DisplayLine(">: Response: errInvalidPath")
EndSelect
SeparatorLine()
End Sub
// Display response for Boolean type responses
Sub DisplayResponse(pResponseB As Boolean)
Select pResponseB
Case True
DisplayLine(">: Response: True")
Case False
DisplayLine(">: Response: False")
EndSelect
SeparatorLine()
End Sub
// Display time
Sub DisplayTime()
Dim Time As Float
Time = 4 * Counter / ClockDiv
DisplayLine(">: Time Taken: " + FloatToStr(Time,4,3) + " sec")
SeparatorLine()
End Sub
Function GetName(pPrompt As String) As String * 24
DisplayLine("?: " + pPrompt + ":")
SeparatorLine()
USART.Read(GetName)
End Function
Sub SDCode(pMenuOption As String)
Dim Index As LongWord
Dim Name As String
Dim NameNew As String
Dim FileName As String(13)
Dim Response As Byte
If pMenuOption <> " " Then
SeparatorLine()
DisplayLine(">: Option: " + pMenuOption)
EndIf
SeparatorLine()
Select pMenuOption
Case " " // Menu
Menu()
Case "A" // Init
TimerStart()
DisplayResponse(SD.Init())
TimerStop()
DisplayTime()
Case "B" // QuickFormat
TimerStart()
DisplayResponse(SD.QuickFormat)
TimerStop()
DisplayTime()
Case "C" // Dir
DisplayLine(">: Directory of SD/MMC:")
TimerStart()
FileName = SD.Dir(dirFirst, sdFile)
While FileName <> Null
DisplayLine(">: " + FileName)
FileName = SD.Dir(dirNext, sdFile)
Wend
FileName = SD.Dir(dirFirst, sdDirectory)
While FileName <> Null
DisplayLine(">: " + FileName + " <DIR>")
FileName = SD.Dir(dirNext, sdDirectory)
Wend
TimerStop()
DisplayLine(">: " + DecToStr(SD.FileCount, 2) + " File(s)")
DisplayLine(">: " + DecToStr(SD.DirCount, 2) + " Directory(s)")
SeparatorLine()
DisplayTime()
Case "D" // ChDir
Name = GetName("Enter Directory Name")
TimerStart()
DisplayResponse(SD.ChDir(Name))
TimerStop()
DisplayTime()
Case "E" // ChDir(Root)
TimerStart()
DisplayResponse(SD.ChDir(cdRoot))
TimerStop()
DisplayTime()
Case "F" // ChDir(Up)
TimerStart()
DisplayResponse(SD.ChDir(cdUp))
TimerStop()
DisplayTime()
Case "G" // NewFile
Name = GetName("NewFile - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write("SDFileSystemTest - Section 1 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 300
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "H" // AppendFile
Name = GetName("AppendFile - Enter File Name")
Response = SD.AppendFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write("SDFileSystemTest - Section 2 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 300
SD.CloseFile()
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "I" // OpenFile
Name = GetName("OpenFile - Enter File Name")
Response = SD.OpenFile(Name)
DisplayResponse(Response)
If Response = errOK Then
NewLine()
TimerStart()
Repeat
USART.Write(SD.ReadByte())
Until SD.EOF
SD.CloseFile
TimerStop()
NewLine()
SeparatorLine()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "J" // DeleteFile
Name = GetName("DeleteFile - Enter File Name")
TimerStart()
DisplayResponse(SD.DeleteFile(Name))
TimerStop()
DisplayTime()
Case "K" // FileExists
Name = GetName("FileExists - Enter File Name")
TimerStart()
DisplayResponse(SD.FileExists(Name))
TimerStop()
DisplayTime()
Case "L" // DirExists
Name = GetName("DirExists - Enter Directory Name")
TimerStart()
DisplayResponse(SD.DirExists(Name))
TimerStop()
DisplayTime()
Case "M" // MkDir
Name = GetName("MkDir - Enter Directory Name")
TimerStart()
DisplayResponse(SD.MkDir(Name))
TimerStop()
DisplayTime()
Case "N" // RmDir
Name = GetName("RmDir - Enter Directory Name")
TimerStart()
DisplayResponse(SD.RmDir(Name))
TimerStop()
DisplayTime()
Case "O" // Rename
Name = GetName("Rename - Enter Old File Name")
NameNew = GetName("Rename - Enter New File Name")
TimerStart()
DisplayResponse(SD.Rename(Name, NameNew, sdFile))
TimerStop()
DisplayTime()
Case "P" // DiskFull
TimerStart()
DisplayResponse(SD.DiskFull)
TimerStop()
DisplayTime()
Case "Q" // DiskMounted
TimerStart()
DisplayResponse(SD.DiskMounted)
TimerStop()
DisplayTime()
Case "R" // DiskSizeKB
TimerStart()
DisplayLine(">: Disk Size: " + DecToStr(SD.DiskSizeKB()) + " KB")
TimerStop()
SeparatorLine()
DisplayTime()
Case "S" // FreeSpaceKB
TimerStart()
DisplayLine(">: Free Space: " + DecToStr(SD.FreeSpaceKB()) + " KB")
TimerStop()
SeparatorLine()
DisplayTime()
Case "T" // IsOpen
TimerStart()
DisplayResponse(SD.IsOpen)
TimerStop()
DisplayTime()
Case "U" // IsRootDir
TimerStart()
DisplayResponse(SD.IsRootDir)
TimerStop()
DisplayTime()
Case "V" // RWError
TimerStart()
DisplayResponse(SD.RWError)
TimerStop()
DisplayTime()
Case "W" // NewFile(1MB)
Name = GetName("NewFile(1MB) - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
Index = 1
TimerStart()
Repeat
SD.Write(".")
Inc(Index)
Until Index > 1048576
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "X" // SaveFile
Name = GetName("SaveFile - Enter File Name")
Response = SD.NewFile(Name)
DisplayResponse(Response)
If Response = errOK Then
TimerStart()
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 1 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 2 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 3 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.SaveFile
Index = 1
Repeat
SD.Write("SDFileSystemTest - Section 4 - Line ",DecToStr(Index,4),13,10)
Inc(Index)
Until Index > 100
SD.CloseFile
TimerStop()
DisplayLine(">: File Closed")
SeparatorLine()
DisplayTime()
EndIf
Case "Y" // Format
TimerStart()
DisplayResponse(SD.Format(1))
TimerStop()
DisplayTime()
Case "Z" // SerialNumber
TimerStart()
DisplayLine(">: SerialNumber: " + HexToStr(SD.SerialNumber()))
TimerStop()
SeparatorLine()
DisplayTime()
Case "1" // MemoryType
TimerStart()
Select SD.MemoryType()
Case sdMMC Name = "MMC"
Case sdSD Name = "SD"
Case sdSDHC Name = "SDHC"
EndSelect
DisplayLine(">: MemoryType: " + Name)
TimerStop()
SeparatorLine()
DisplayTime()
Case "2" // FATType
TimerStart()
Select SD.FATType()
Case 1 Name = "FAT16"
Case 2 Name = "FAT32"
EndSelect
DisplayLine(">: FATType: " + Name)
TimerStop()
SeparatorLine()
DisplayTime()
Case "3" // DestroyFormat
TimerStart()
DisplayResponse(SD.DestroyFormat)
TimerStop()
DisplayTime()
Case "4" // FileCount
TimerStart()
DisplayLine(">: FileCount: " + DecToStr(SD.FileCount()))
TimerStop()
SeparatorLine()
DisplayTime()
Case "5" // DirCount
TimerStart()
DisplayLine(">: DirCount: " + DecToStr(SD.DirCount()))
TimerStop()
SeparatorLine()
DisplayTime()
Else
DisplayLine(">: Option Not Recognised")
SeparatorLine()
EndSelect
End Sub
// Main program...
SetBaudrate(br115200)
USART.ReadTerminator = #13
DelayMS(1000)
TimerInterruptsEnabled = True // Enable timer interrupts
Enable(OnTimer) // Assign the interrupt handler
SDCode(" ") // Display menu at start, then only with space
NewLine()
While True
USART.Read(MenuOption)
SDCode(Str.Uppercase(MenuOption))
NewLine()
Wend
=]