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.
Dependents: mbed_EEPROM USBMSD_step1 USBMSD_step1_5 picossd_step1_2cs
Revision 0:25e5bc71e65f, committed 2014-06-26
- Comitter:
- yasuyuki
- Date:
- Thu Jun 26 13:45:34 2014 +0000
- Commit message:
- first revision
Changed in this revision
| EEPROM.cpp | Show annotated file Show diff for this revision Revisions of this file |
| EEPROM.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM.cpp Thu Jun 26 13:45:34 2014 +0000
@@ -0,0 +1,72 @@
+//**********************
+// EEPROM.cpp for TG-LPC11U35-501
+// TG-LPC11U35-501 has 4K EEPROM.
+//
+// usage:
+// EEPROM eeprom;
+// char RAM[100]
+// eeprom.write(0, RAM, 100);
+// eeprom.read(0, RAM, 100);
+// eeprom.put(0, 0x00);
+// i=eeprom.get(0);
+//
+// note:
+// valid EEPROM address range is between 0 to 4031
+// top 64 bytes are reserved
+//
+// (C)Copyright 2014 All rights reserved by Y.Onodera
+// http://einstlab.web.fc2.com
+//**********************
+#include "EEPROM.h"
+
+int EEPROM::write( unsigned int EEPROM_addr, char *RAM_addr, unsigned int n ) {
+ command[0] = EEPROM_Write;
+ command[1] = EEPROM_addr;
+ command[2] = (unsigned int)RAM_addr;
+ command[3] = n;
+ command[4] = cclk_kHz;
+
+ iap_entry( command, status );
+
+ return ( (int)status[0] );
+}
+
+
+int EEPROM::read( unsigned int EEPROM_addr, char *RAM_addr, unsigned int n ) {
+ command[0] = EEPROM_Read;
+ command[1] = EEPROM_addr;
+ command[2] = (unsigned int)RAM_addr;
+ command[3] = n;
+ command[4] = cclk_kHz;
+
+ iap_entry( command, status );
+
+ return ( (int)status[0] );
+}
+
+
+int EEPROM::put( unsigned int EEPROM_addr, char data ) {
+ dat[0]=data;
+ command[0] = EEPROM_Write;
+ command[1] = EEPROM_addr;
+ command[2] = (unsigned int)dat;
+ command[3] = 1;
+ command[4] = cclk_kHz;
+
+ iap_entry( command, status );
+
+ return ( (int)status[0] );
+}
+
+
+char EEPROM::get( unsigned int EEPROM_addr ) {
+ command[0] = EEPROM_Read;
+ command[1] = EEPROM_addr;
+ command[2] = (unsigned int)dat;
+ command[3] = 1;
+ command[4] = cclk_kHz;
+
+ iap_entry( command, status );
+
+ return ( dat[0] );
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM.h Thu Jun 26 13:45:34 2014 +0000
@@ -0,0 +1,67 @@
+//**********************
+// EEPROM.h for TG-LPC11U35-501
+//
+// (C)Copyright 2014 All rights reserved by Y.Onodera
+// http://einstlab.web.fc2.com
+//**********************
+
+#ifndef __ROMAPI_11U35_H_
+#define __ROMAPI_11U35_H_
+
+#include "mbed.h"
+
+typedef enum {
+ CMD_SUCCESS = 0, // Command is executed successfully.
+ INVALID_COMMAND = 1, // Invalid command.
+ SRC_ADDR_ERROR = 2, // Source address is not on a word boundary.
+ DST_ADDR_ERROR = 3, // Destination address is not on a correct boundary.
+ SRC_ADDR_NOT_MAPPED = 4, // Source address is not mapped in the memory map.
+ DST_ADDR_NOT_MAPPED = 5, // Destination address is not mapped in the memory map.
+ COUNT_ERROR = 6, // Byte count is not multiple of 4 or is not a permitted value.
+ INVALID_SECTOR = 7, // Sector number is invalid.
+ SECTOR_NOT_BLANK = 8, // Sector is not blank.
+ SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION = 9, // Command to prepare sector for write operation was not executed.
+ COMPARE_ERROR =10, // Source and destination data is not same.
+ BUSY = 11 // flash programming hardware interface is busy.
+} IAPstatus;
+
+
+typedef enum {
+ Prepare_sector = 50,
+ Copy_RAM_flash = 51,
+ Erase_sector = 52,
+ Blank_check_sector = 53,
+ Read_Part_ID = 54,
+ Read_Boot_version = 55,
+ Compare = 56,
+ Reinvoke_ISP = 57,
+ Read_UID = 58,
+ Erase_page = 59,
+ EEPROM_Write = 61,
+ EEPROM_Read = 62
+} IAPcommand;
+
+
+#define IAP_LOCATION (0x1FFF1FF1UL)
+typedef void (*IAP)(unsigned int[], unsigned int[]);
+
+
+class EEPROM {
+public:
+ EEPROM() : iap_entry( reinterpret_cast<IAP>(IAP_LOCATION) ), cclk_kHz( SystemCoreClock / 1000 ) {}
+
+ int write( unsigned int EEPROM_addr, char *RAM_addr, unsigned int n );
+ int read( unsigned int EEPROM_addr, char *RAM_addr, unsigned int n );
+ int put( unsigned int EEPROM_addr, char data );
+ char get( unsigned int EEPROM_addr );
+
+private:
+ IAP iap_entry;
+ unsigned int command[5];
+ unsigned int status[4];
+ char dat[1];
+ int cclk_kHz;
+};
+
+
+#endif /* __ROMAPI_11U35_H_ */