Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:b2771f496313, committed 2015-07-08
- Comitter:
- alec1
- Date:
- Wed Jul 08 20:59:56 2015 +0000
- Child:
- 1:550759f64702
- Commit message:
- Rev0
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SPI_MX25R.lib Wed Jul 08 20:59:56 2015 +0000 @@ -0,0 +1,1 @@ +SPI_MX25R#a16ad6f5c788
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Jul 08 20:59:56 2015 +0000
@@ -0,0 +1,236 @@
+#include <ctype.h>
+#include "mbed.h"
+#include "SPI_MX25R.h"
+DigitalOut myled3(LED3); //Red
+DigitalOut myled1(LED1); //Blue
+DigitalOut led_green(LED_GREEN);
+
+// SPI_MX25R(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
+// FRDM-K64F
+// D13 SPI0_SCK (PTD1) J2<12>
+// D12 SPI0_MISO (PTD3) J2<10>
+// D11 SPI0_MOSI (PTD2) J2<8>
+// D10 SPI0_PCS0 (PTD0) J2<6>
+// Vdd =3.3V = J3<4>
+// Gnd =0.0V = J2<14>
+SPI_MX25R spi_mem(PTD2, PTD3, PTD1, PTD0) ;
+
+void usage(void)
+{
+ printf("==== List of Commands =============================================================\n\r") ;
+ printf("\n\r") ;
+ printf("rdid (Read Manu and Dev ID, 9Fh)\n\r") ;
+ printf("wren (Write Enable, set WEL=1, 06h)\n\r") ;
+ printf("wrdi (Write Disable, set WEL=0, 04h)\n\r") ;
+ printf("rdsr (Read Status Register, 05h + 00h)\n\r") ;
+ printf("reset (ResetEnable + SoftwareReset = 66h + 99h)\n\r") ;
+ printf("hp (Enter HP mode = WREN=06h + WRSR= 01h 00 00 02h )\n\r") ;
+ printf("lp (Enter LP mode = WREN=06h + WRSR= 01h 00 00 00h )\n\r") ;
+ printf("rdcr (Read Config Register, 15h + 00 00h)\n\r") ;
+ printf("read address (read 1 byte of data, ex: read 0x0000)\n\r") ;
+ printf("rd4 address (read 4 bytes of data, ex: read 0x0000)\n\r") ;
+ printf("rd256 address (read 256 bytes of data, ex: read 0x0000)\n\r") ;
+ printf("pp address (256B Page Program, ex: pp 0x00 <- note: routine sets WEL)\n\r") ;
+ printf("se address (4KB Sector Erase, ex: be 0x00 <- note: routine sets WEL)\n\r") ;
+ printf("be address (64KB Block Erase, ex: be 0x00 <- note: routine sets WEL)\n\r") ;
+ printf("32Kbe address (32KB Block Erase, ex: 32kbe 0x00 <- note: routine sets WEL)\n\r") ;
+ printf("ce (Chip Erase = C7h, ex: ce <- note: routine sets WEL)\n\r") ;
+ printf("\n\r") ;
+ printf("===================================================================================\n\r") ;
+}
+
+void rd256(unsigned long address)
+{
+ unsigned int i, j ;
+ unsigned char data[0x10] ;
+
+ printf(" : ") ;
+ for (i = 0 ; i < 0x10 ; i++ ) {
+ printf("+%X ",i) ;
+ }
+ printf("\n\r") ;
+ for (j = 0 ; j < 0x10 ; j++ ) {
+ printf("%06X : ", address + (0x10 * j)) ;
+ for (i = 0 ; i < 0x10 ; i++ ) {
+ data[i] = spi_mem.read8(address + 0x10 * j + i) ;
+ printf("%02X ", data[i]) ;
+ }
+ printf(": ") ;
+ for (i = 0 ; i < 0x10 ; i++ ) {
+ if (isprint(data[i])) {
+ printf("%c", data[i]) ;
+ } else {
+ printf(".") ;
+ }
+ }
+ printf(" :\n\r") ;
+ }
+ printf("\n\r") ;
+}
+
+int main() {
+ char cmd[32] ;
+ //int tmp = 0 ;
+ int i ;
+ int numData = 256 ;
+ unsigned long address = 0 ;
+ unsigned char data[256] ;
+
+ extern serial_t stdio_uart ;
+ serial_baud(&stdio_uart, 9600) ;
+
+ printf("\n\r") ;
+ printf("\n\r") ;
+ printf("\n\r") ;
+ printf("\n\r") ;
+printf("\n\r ####################################################\n\r") ;
+ printf(" # #\n\r") ;
+ printf(" # Macronix MX25Rxx35F Serial NOR Flash Testbench #\n\r") ;
+ printf(" # #\n\r") ;
+ printf(" ####################################################\n\r") ;
+ printf("\n\r") ;
+ usage() ;
+
+myled3 = 1;
+myled1 = 1;
+led_green = 0;
+
+while(1){
+ printf("> ") ;
+ scanf("%s", cmd) ;
+ if (strcmp(cmd, "read") == 0) {
+ scanf("%X", &address) ;
+ data[0] = spi_mem.read8(address) ;
+ printf("%01X : 0x%02X\n\r", address, data[0]) ;
+
+ } else if (strcmp(cmd, "rd4") == 0) {
+ scanf("%X", &address) ;
+ printf(" 4B data = 0x%08X\n\r", spi_mem.rd32(address)) ;
+
+ } else if (strcmp(cmd, "rdsr") == 0) { // Read Status Register
+ data[0] = spi_mem.readStatus() ;
+ printf(" status register = 0x%02X\n\r", data[0]) ;
+ printf("RDSR = 05h done\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "reset") == 0) { // ResetEnable + Software Reset
+ spi_mem.resetEnable() ;
+ spi_mem.reset() ;
+ printf("Software ResestEnable 66h + Reset 99h completed\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "rdcr") == 0) { // Read Configuration Register
+ printf(" configuration register = 0x%04X\n\r", spi_mem.readConfig()) ;
+ printf("RDCR = 15h done\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "rdid") == 0) { // Read ID
+ printf(" ID = 0x%06X\n\r", spi_mem.readID()) ;
+ printf("RDID = 9Fh done\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "wren") == 0) { // Write Enable
+ spi_mem.writeEnable() ;
+ printf(" WREN = 06h set\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "wrdi") == 0) { // Write Disable
+ spi_mem.writeDisable() ;
+ printf(" done\n\r") ;
+
+ } else if (strcmp(cmd, "pp") == 0) { // Page Program
+ scanf("%X", &address) ;
+ printf("writing %d bytes to 0x%X\n\r",numData, address) ;
+ spi_mem.writeEnable() ; // send WREN 1st
+ for (i = 0 ; i < numData ; i++ ) {
+ data[i] = i & 0xFF ;
+ }
+ spi_mem.programPage(address, data, numData) ;
+ data[0] = 0 ;
+ while((data[0] & 0x01) != 0x01 ) {
+ printf(".") ;
+ data[0] = spi_mem.readStatus() ;
+ wait(0.01) ;
+ }
+ printf("\n\r") ;
+ printf(" PP = 02h done\n\r") ;
+ led_green = 1;
+
+ } else if (strcmp(cmd, "ce") == 0) { // Chip Erase
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.chipErase() ;
+ data[0] = 0x01 ; // poll if WIP bit SR<0>=1
+ while((data[0] & 0x01) != 0 ) {
+ printf("wait, chip erase in progress") ;
+ data[0] = spi_mem.readStatus() ;
+ printf(" --> status register = 0x%02X\n\r", data[0]) ;
+ wait(5) ;
+ } // end poll
+ printf("CE = C7h done\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "se") == 0) { // Sector Erase
+ scanf("%X", &address) ;
+ printf("Eraseing address 0x%X\n\r", address) ;
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.sectorErase(address) ;
+ data[0] = 0x01 ; // poll if WIP bit SR<0>=1
+ while((data[0] & 0x01) != 0 ) {
+ printf(".") ;
+ data[0] = spi_mem.readStatus() ;
+ wait(0.1) ;
+ } // end poll
+ printf("SE = 20h done\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "be") == 0) { // 64KB Block Erase
+ scanf("%X", &address) ;
+ printf("Eraseing address 0x%X\n\r", address) ;
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.blockErase(address) ;
+ data[0] = 0x01 ; // poll if WIP bit SR<0>=1
+ while((data[0] & 0x01) != 0 ) {
+ printf(".") ;
+ data[0] = spi_mem.readStatus() ;
+ wait(0.1) ;
+ } // end poll
+ printf("BE = D8h done\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "32kbe") == 0) { // 32KB Block Erase
+ scanf("%X", &address) ;
+ printf("Eraseing address 0x%X\n\r", address) ;
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.blockErase(address) ;
+ data[0] = 0x01 ; // poll if WIP bit SR<0>=1
+ while((data[0] & 0x01) != 0 ) {
+ printf(".") ;
+ data[0] = spi_mem.readStatus() ;
+ wait(0.1) ;
+ } // end poll
+ printf("32KBE = 52h done\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "hp") == 0) { // Enter High Performance Mode
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.hpmode() ;
+ printf(" You are now in High Performance mode\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "lp") == 0) { // Enter Low Power Mode
+ spi_mem.writeEnable() ; // send WREN 1st
+ spi_mem.lpmode() ;
+ printf(" You are now in Low Power mode\n\r") ;
+ led_green = 0;
+
+ } else if (strcmp(cmd, "rd256") == 0) {
+ scanf("%X", &address) ;
+ rd256(address) ;
+ } else if (strcmp(cmd, "help") == 0) {
+ usage() ;
+ } else {
+ printf("Command NOT Recognized [ %s ]\n\r", cmd) ;
+ usage() ;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Jul 08 20:59:56 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7 \ No newline at end of file
Macronix MX25Rxx35F Serial NOR Flash