LPC1347 EEPROM Source

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPC1347 EEPROM Source

2,277 Views
berndsirozynski
Contributor III

Hello,

In a new project i use the LPC1347

this chip has an "internal eeprom" and i can use only the "internal ROM" function to access this memory.

because i dont want to disable the interrupts while reading or writing the EEPROM

i found the external LIB, which can linked to project. LIBEEPROM.a

For a risk analyse i have a problem with the internal and also for the external lib

because i have no source, it belongs the category "SOUP" (Software Of Unknown Provenance)

My Software at time dont use any SOUP, because it is an medical product.

Is there any way to get the Source Code for the LIB ?

Or can i get a description to the EEPROM registers of the Chip, to write my own code ?

I think it is not a secret code to write to EEPROMs, i do that every day

with external eeproms in an other projects.

 

very thanks for information.

Bernd

Labels (1)
Tags (1)
0 Kudos
Reply
9 Replies

1,303 Views
rolfmeeser
NXP Employee
NXP Employee

Hi Bernd,

As for the local NXP office support offered by Brendon, you can contact me at <firstname>.<lastname>@nxp.com.

Regards,

Rolf

0 Kudos
Reply

1,303 Views
berndsirozynski
Contributor III

a lot of test are running and i also loocked to the Assembler source:

The Library includes:

EELIB_entry         external

EELIB_getVersion    external

EELIB_idleHandler   external

_EEPROM_init        internal only

_EEPROM_write       internal only

_EEPROM_read        internal only

library creation info: found in the library itself:

GCC: (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977] A2aeabi (Cortex-M3)

The Assembler code shows that the first action is to check the function WRITE or READ to eeprom

the order of the compare i think is not so good.

most accesses in EEPROMs is to the READ function, but the first compare ist to the write function

this eats unnecessary time :-)

push {lr}

sub sp,#28

str r0,[sp,#4]

str r1,[sp,#0]

ldr r3,[sp,#4]

ldr r3,[r3,#0]

cmp r3,#61       IAP command EELIB_IAP_COMMAND_EEPROM_WRITE

beq.n   entry+34

ldr  r3,[sp,#4]

ldr  r3,[r3,#0]

cmp r3,#62       IAP command EELIB_IAP_COMMAND_EEPROM_READ

beq.n  entry+34

the EELIB_getVersion simply result a constant 3

all the range checks i have tested are well done.

The latest eeprom address in the LPC1347 is 4096-64-1= 4031 adress range 0..4031 decimal

Access greater this address results in a  EELIB_IAP_STATUS_DST_ADDR_NOT_MAPPED error

                                  // write ablock of comlete EEPROM size (4032 Bytes)

  res = EE_Write(0,&value,4032);  // EELIB_IAP_STATUS_CMD_SUCCESS

                                  // try to write 4033 Bytes (one byte to much)

  res = EE_Write(0,&value,4033);  // EELIB_IAP_STATUS_DST_ADDR_NOT_MAPPED

                                  // write only to the latest eeprom address one byte

  res = EE_Write(4031,&value,1);  // EELIB_IAP_STATUS_CMD_SUCCESS

                                  // write to the latest eeprom address 2 Bytes: (one byte above)

  res = EE_Write(4031,&value,2);  // EELIB_IAP_STATUS_DST_ADDR_NOT_MAPPED

                                  // write to an eeprom address outside the address range */

  res = EE_Write(4050,&value,1);  // EELIB_IAP_STATUS_DST_ADDR_NOT_MAPPED

the eeprom write code i have stepped one by one the complete code and there is nothing

which change any interrupts to slow down the CPU.

the hook function is also tested. In the dead time while eeprom is written, it calls the

void EELIB_idleHandler (void)

i am on the best way to validate the library :-)

Siro

0 Kudos
Reply

1,303 Views
berndsirozynski
Contributor III

New tests for the libeeprom: write cycle timing and hook functionality

the EEPROM is paged to 64 bytes each, so writes above the page boundary needs more time

one page write need typically 1100 write + 1800 erase = 2900 microsecond  as described in the datasheet.

my measeure can confirm that:

New behavior of the hook function was found:

The hook function is called for every page write.

So if you write data only in one page, the hook was called one time

if you write bytes which ovelaps two pages the hook was called two times.

examples:

EE_Write(62,&value,2);  time = 2092 µs    2 bytes, all in in the frist page

EE_Write(63,&value,2);  time = 5772 µs    2 bytes, first and secound page used

know: in the secound example the hook function was called two times.

so the hook function works very fine, but that was not found in the documention,

or i cant find it.

no of bytes written

time in microscound

EE pages = hook calls

1

2888

1

2

2891

1

4

2893

1

5

2895

1

10

2896

1

20

2905

1

50

2927

1

64

2937

1

65

5821

2

127

5869

2

128

5869

2

129

8752

3

192

8825

3

193

11708

4

255

11765

4

256

11732

4

257

14648

5

Have a good weekend

Siro

0 Kudos
Reply

1,303 Views
dmitryf
Contributor I

Check eeprom source code from LPC15xx LPCOpen library

LPCOpen Software for LPC15XX|NXP

0 Kudos
Reply

1,303 Views
berndsirozynski
Contributor III

Hello Dmitry,

thanks for your answer.

The LPC Open Library used the internal ROM Code of the Controller

the only documentation is : how to call the functions via IAP calls

but it has no code dokumentation inside this function:  iap_entry(command, result);

i know how to use these functions and it works fine with the internal ROM

and also works fine with the linked libeeprom library.

but i looked for the inside code, or registers how it works.

Bernd

0 Kudos
Reply

1,303 Views
brendonslade
NXP TechSupport
NXP TechSupport

Hi Bernd,

The IAP and ISP functions are implemented in ROM, for which NXP does not release source code, sorry.

NXP might be able to help you get through this situation for a medical application that has special requirements - please contact your local NXP office for help with that.

Regards,

Brendon

0 Kudos
Reply

1,303 Views
berndsirozynski
Contributor III

Thank you for the answer Brendon

I find that very unfortunate, that the ROM code ist not open

What's so mysterious in that code :-)

It's just about the principle, Drivers ROM code must be open

This is my personal opinion.

Maybe i contact NXP or i use external EEPROMs.

Bernd

0 Kudos
Reply

1,303 Views
brendonslade
NXP TechSupport
NXP TechSupport

Hi Bernd,

I can understand you might think that... but actually we have some "special sauce" in there to do with flash memory control and other items, so that's why we don't release it as a general rule.

The point about releasing some aspects related to boot behavior is a valid point, but we try to do that with written explanations.

Best regards

Brendon

0 Kudos
Reply

1,303 Views
berndsirozynski
Contributor III

Hello,

I have decide to test the library thorougly.

So i can verify the behavior and validate the functionality

The Testobject is the libeeprom-lpc1347.a Version 3

Today i have tested the generell functionality.

Read Write with different sizes and addresses.

Then i build a RAM block copy of the complete eeprom

and fill it with defied values.

This complete block was written to the eeprom.

the ram was cleared and all eeprom reading.

All test are succesfull.

then i have tested the last 64 Bytes of eeprom.

To do that i have programmed a serial terminal to access

to the complete menory.

The last 64 Bytes cant be written.

The read value is always 0x00.

The version number i can also read. result is "3"

Tomorroy i will continue some tests with interrupts etc.

If there is any problem in my tests i will write here.

Bernd

0 Kudos
Reply