endNode Memory Map
The endNode Memory Map helps users identify important FRAM memory locations in a endNode controller. The Memory Map editor/viewer is accessed from Alpha Station. We built this editor to help develop endNode devices as it’s important to see what’s happening in memory during the design process. We elected to share this tool with our users so they can get the most out of endNode devices. We typically don’t advise using the endNode Memory Map unless you have a good understanding of what your are doing. Changing data in endNode memory can vastly affect operation of the endNode firmware. endNode memory is constantly accessed by the endNode firmware, so some memory locations are very sensitive to changes.
To access the endNode FRAM Memory Map, run Alpha Station and click “Memory Manger” (A). The following window will appear:
The FRAM Memory Map allows viewing of two memory locations simultaneously. For some operations, this can be really helpful, particularly relay control. When the Memory Map is first opened, the two most important sections of memory are displayed. The “Requested” relay status is shown on the left. The “Actual” relay status is shown on the right.
ProXR commands modify the “Requested” memory almost exclusively. Data is automatically copied from “Requested” to “Actual” memory as per the ProXR driver settings. When a copy is made, the associated I2C commands are sent to control the relays to manipulate only the relays that have changed state. This is part of the “Soft Refresh” function, which was covered in the ProXR Enterprise Command Set. You may also recall the “Hard Refresh” command, which wipes out the “Actual Memory”, which triggers a copy from the “Requested” memory, causing every relay on every I2C Port to be refreshed.
Use the (B) Address button to examine memory locations on the left side of the window.
Take a good look at section (C) shown above. The buttons along the top and bottom are used to navigate to important areas of memory. Think of these as shortcuts.
Section (D) is very important, as it displays the memory address, the Hex Value, the Decimal Value, the Binary Value, and the descriptions of what each memory location is used for.
The Edit buttons allow you to modify memory, which was very useful for troubleshooting during the development process. Note that edits will not take effect until the “Save” button is clicked.
Also note that some areas of memory are always changing state. The “Refresh” button reloads memory and displays the current contents of memory.
The “Random” button was also used for diagnostics, as it fills the associated memory location with a Random value and automatically saves the value to FRAM memory.
E) The “Clear Sector” button is used to erase all memory on the selected page.
F) The second “Address” buttons are used to navigate to a alternate area of FRAM memory for comparative viewing purposes only.
Please Note that some areas of memory cannot be modified by the endNode Memory Map. These memory locations are protected, as they are part of the ProXR Driver Configuration. Only the “I2C Bus Scanner and ProXR Linker” can be used to modify this memory, as it must be altered in a highly controlled way.
There are only two commands to learn for FRAM Memory Reading and Writing. These commands should be used with great care, as they can potentially destroy the functionality of the endNode device, requiring a factory reset.
Because we are using FRAM memory, you may write to memory as much as you want, it will not degrade and will never require battery backup.
If you wish to control relays directly without using ProXR Enterprise commands, simply learn to Read and Write to FRAM memory locations 0x00 to 0xFF. These memory locations control up to 2,048 relays when working with large endNode devices with 16 I2C ports.
Reading endNode Memory
Use the following command structure to read FRAM Memory from endNode devices. FRAM memory is always read in 16-Byte blocks.
Please note the maximum Memory Location Start address is 7,000 or 0x1B58.
Byte 1: 0xFE - System Control Command Set
Byte 2: 0x34 - Read External FRAM Memory Function
Byte 3: 0x00 - Memory Location MSB Value (Valid Range is 0x00 to 0xFF)
Byte 4: 0x00 - Memory Location LSB Value (Valid Range is 0x00 to 0xFF)
Byte 5: 0x0F - Number of Bytes to Read (Data is Always Read in 16-Byte Blocks)
Please use the API Calculator to Properly Encode All Commands.
The controller will return 16 Byte of Data beginning with the Memory Location identified in the command.
Library Integration: NCDLib.Enterprise.Setup.EEPROM_Read(NCDComponent1, True, StartAddress.Value, 16)
Writing to endNode Memory
Use the following command structure to write FRAM Memory into endNode devices. Data will be written into the first memory location shown plus 15 additional memory locations. FRAM memory is always written in 16-Byte blocks.
Please note the maximum Memory Location Start address is 7,000 or 0x1B58.
Byte 1: 0xFE - System Control Command Set
Byte 2: 0x35 - Read External FRAM Memory Function
Byte 3: 0x00 - Memory Location MSB Value (Valid Range is 0x00 to 0xFF)
Byte 4: 0x00 - Memory Location LSB Value (Valid Range is 0x00 to 0xFF)
Byte 5: 0x00 - Write 0 into the First Memory Location (Valid Range is 0x00-0xFF)
Byte 6: 0x01 - Write 1 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 7: 0x02 - Write 2 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 8: 0x03 - Write 3 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 9: 0x04 - Write 4 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 10: 0x05 - Write 5 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 11: 0x06 - Write 6 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 12: 0x07 - Write 7 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 13: 0x08 - Write 8 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 14: 0x09 - Write 9 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 15: 0x0A - Write 10 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 16: 0x0B - Write 11 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 17: 0x0C - Write 12 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 18: 0x0D - Write 13 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 19: 0x0E - Write 14 into the Next Memory Location (Valid Range is 0x00-0xFF)
Byte 20: 0x0F - Write 15 into the Last Memory Location (Valid Range is 0x00-0xFF)
Please use the API Calculator to Properly Encode All Commands.
This command will return 0x55 upon completion.
Library Integration: NCDLib.Enterprise.Setup.EEPROM_Write(NCDComponent1, True, StartAddress.Value, I)