machine/flash: remove FlashBuffer, modify flash example to use BlockDevice interface

Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
deadprogram
2023-05-09 22:03:11 +02:00
committed by Ron Evans
parent 6435f62dcc
commit b56a263d0d
2 changed files with 38 additions and 90 deletions
+38 -11
View File
@@ -7,7 +7,10 @@ import (
var (
err error
message = "1234567887654321123456788765432112345678876543211234567887654321"
message = "1234567887654321123456788765432112345678876543211234567887654321" +
"1234567887654321123456788765432112345678876543211234567887654321" +
"1234567887654321123456788765432112345678876543211234567887654321" +
"1234567887654321123456788765432112345678876543211234567887654321"
)
func main() {
@@ -21,30 +24,54 @@ func main() {
println("Flash erase block size:", machine.Flash.EraseBlockSize())
println()
flash := machine.OpenFlashBuffer(machine.Flash, machine.FlashDataStart())
original := make([]byte, len(message))
saved := make([]byte, len(message))
// Read flash contents on start (data shall survive power off)
print("Reading data from flash: ")
_, err = flash.Read(original)
println("Reading original data from flash:")
_, err = machine.Flash.ReadAt(original, 0)
checkError(err)
println(string(original))
// erase flash
println("Erasing flash...")
needed := int64(len(message)) / machine.Flash.EraseBlockSize()
if needed == 0 {
// have to erase at least 1 block
needed = 1
}
err := machine.Flash.EraseBlocks(0, needed)
checkError(err)
// Write the message to flash
print("Writing data to flash: ")
flash.Seek(0, 0) // rewind back to beginning
_, err = flash.Write([]byte(message))
println("Writing new data to flash:")
_, err = machine.Flash.WriteAt([]byte(message), 0)
checkError(err)
println(string(message))
// Read back flash contents after write (verify data is the same as written)
print("Reading data back from flash: ")
flash.Seek(0, 0) // rewind back to beginning
_, err = flash.Read(saved)
println("Reading data back from flash: ")
_, err = machine.Flash.ReadAt(saved, 0)
checkError(err)
if !equal(saved, []byte(message)) {
println("data verify error")
}
println(string(saved))
println()
println("Done.")
}
func equal(a, b []byte) bool {
if len(a) != len(b) {
return false
}
for i, v := range a {
if v != b[i] {
return false
}
}
return true
}
func checkError(err error) {