MX25L8005 - Flash-Speicher über SPI ansteuern
Der auf dem Funkmodul Preon32 eingesetzte Mikrocontroller verfügt über eine Vielzahl von Schnittstellen.
Über diese lassen sich verschiedene Peripherien mit unterschiedlichen Protokollen ansteuern. In
diesem Beispiel wird ein serieller Flash-Speicherbaustein über SPI (serial protocol interface) angesteuert.
Der verwendete Flash vom Typ MX25L8005 wird in diesem Beispiel mit einer Frequenz von 25 MHz betrieben.
Für die Aktivierung wird die entsprechende ChipSelect-Leitung gesetzt. Im Beispiel wird der Flash im ersten
Schritt vollständig gelöscht. Im weiteren Verlauf werden zwei Zugriffsarten gezeigt. Zum einen ist dies
das direkte Schreiben und Lesen ab einer festgelegten Adresse. In der zweiten Variante wird ein Zugriff
über sogenannte Streams realisiert.
/*
* Copyright (c) 2011., Virtenio GmbH
* All rights reserved.
*/
package com.virtenio.webdemo;
import com.virtenio.drivers.flash.Flash;
import com.virtenio.drivers.flash.FlashSectorEraseStrategy;
import com.virtenio.drivers.flash.spi.MX25L8005;
import com.virtenio.drivers.gpio.GPIO;
import com.virtenio.drivers.gpio.NativeGPIO;
import com.virtenio.drivers.spi.NativeSPI;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FlashSPI {
public static void main() throws IOException {
NativeSPI spi = NativeSPI.getInstance(1);
spi.open(0, 0, 25000000);
GPIO chipSelect = NativeGPIO.getInstance(42);
Flash flash = new MX25L8005(spi, chipSelect);
// chip erase
flash.eraseChip();
flash.waitWhileBusy();
// rw function
flash.eraseSector(0);
byte[] b1 = "Hello world!".getBytes();
flash.write(0, b1);
b1 = b1.clone();
flash.read(0, b1);
// streaming function
OutputStream out = flash.getOutputStream(0, new FlashSectorEraseStrategy());
InputStream in = flash.getInputStream(0);
byte[] buffer = new byte[200];
for (int i = 0; i < 25; i++) {
System.out.println("Buf: " + i);
out.write(buffer);
byte[] check = new byte[buffer.length];
in.read(check);
}
}
}


