Ich versuche, die Geräte-ID eines seriellen Flash-Speichers mithilfe der SPI-Verbindungen auf einem mbed zu lesen. Im Datenblatt des seriellen Flash-Speichers W25Q80 steht diese Zahl.
Das Folgende ist der Code, den ich verwende, um zu versuchen, die Geräte-ID zu lesen.
#include "mbed.h"
SPI spi(p5, p6, p7); // mosi, miso, sclk
DigitalOut cs(p8);
Serial pc(p9, p10); // tx, rx
int main() {
// Setup the spi for 8 bit data, high steady state clock,
// second edge capture, with a 1MHz clock rate
spi.format(8,0);
spi.frequency(1000000);
// Select the device by seting chip select low
cs = 0;
wait(1.0);
pc.printf("response from sending 90h: %d\r\n", spi.write(0x90));
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00));
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00));
cs = 1;
}
Alles, was ich lese, sind 0s. Manchmal wird 128 oder 255 angezeigt. Das ist falsch, oder?
Das Datenblatt für den von Ihnen aufgelisteten Teil besagt, dass eine 24-Bit-Adresse nach dem 0x90-Code geschrieben werden sollte. Dann können die 2-Byte-Hersteller- und Gerätecodes gelesen werden. Also 3 Schreibbefehle einfügen und es sollte funktionieren.
pc.printf("response from sending 90h: %d\r\n", spi.write(0x90));
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00)); //Address 23..16
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00)); //Address 15..8
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00)); //Address 7..0
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00)); //Manufacturer ID
pc.printf("response from sending 00h: %d\r\n", spi.write(0x00)); //Device ID
Wenn Sie inkonsistente Ergebnisse erhalten, können Sie Ihre Schreibvorgänge in einer Schleife durchführen und dann drucken, wenn Sie fertig sind. Ich bin mir nicht sicher, wie sich das printf IO auf das Timing der mbed SPI-Implementierung auswirkt, aber wenn Lücken zwischen Byte-Schreibvorgängen auftreten, kann sich dies auf die Reaktion des Flash-Teils auswirken.
unsigned char command[6] = {0x90, 0x00, 0x00, 0x00, 0x00, 0x00};
unsigned char response[6];
for(int i=0; i<6; i++)
{
response[i] = spi.write(command[i]);
}
pc.printf("Manufacturer ID: %d\r\n", command[4]);
pc.printf("Device ID: %d:\r\n", command[5]);
Sie haben auch die Anweisung 90h in Ihrer Quelle, aber Ihr Diagramm ist für die Anweisung 9Fh. Wenn Sie nur die Anweisung ändern, kann Ihr ursprünglicher Code möglicherweise funktionieren.
jsolarski
200ok404nicht gefunden
jsolarski
jsolarski
200ok404nicht gefunden
davidcary
jsolarski
tyblu
Dojo