Difference between revisions of "FRAM Model AIO"

From OpenMotics
Jump to navigation Jump to search
 
(40 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== Introduction ==
 
== Introduction ==
  
The AIO has an onboard FRAM connected via I2C to the DSPIC33E (The Master). FRAM is used to keep track of the real-time change, Eeprom is used to store the settings. This document describes the FRAM memory locations used.
+
The AIO has an onboard FRAM (FM24W256 - 128 pages of 256 bytes) connected via I2C to the DSPIC33E (The Master). FRAM is used to keep track of the real-time changes, Eeprom is used to store the settings. This document describes the FRAM memory locations used.
  
 
== General Configuration Bytes (Page 0) ==
 
== General Configuration Bytes (Page 0) ==
Line 68: Line 68:
  
 
: These 3 bytes represents the number of hours this system is ON. Byte 70 is the MSB (Most Significant Byte), Byte 72 is the LSB (Least Significant Byte).
 
: These 3 bytes represents the number of hours this system is ON. Byte 70 is the MSB (Most Significant Byte), Byte 72 is the LSB (Least Significant Byte).
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||73
 +
|}
 +
 +
: This byte represents the hour (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||74
 +
|}
 +
 +
: This byte represents the minute (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||75
 +
|}
 +
 +
: This byte represents the second (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||76
 +
|}
 +
 +
: This byte represents the day (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||77
 +
|}
 +
 +
: This byte represents the month (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||78
 +
|}
 +
 +
: This byte represents the year (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||79
 +
|}
 +
 +
: This byte represents which pulse counter input had an integrity problem. When byte.BIT7 (MSB)=1 -> Pulse Counter input 7 had an integrity problem (Byte.BIT7=0 -> value is ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 0 had an integrity problem (Byte.BIT0=0 -> value is ok)
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||80
 +
|}
 +
 +
: This byte represents which pulse counter input had an integrity problem. When byte.BIT7 (MSB)=1 -> Pulse Counter input 15 had an integrity problem (Byte.BIT7=0 -> value is ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 8 had an integrity problem (Byte.BIT0=0 -> value is ok)
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||81
 +
|}
 +
 +
: This byte represents which pulse counter input had correct data loaded. When byte.BIT7 (MSB)=1 -> Pulse Counter input 7 had a correct pulse counter loaded (Byte.BIT7=0 -> value is not ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 0 had a correct pulse counter loaded (Byte.BIT0=0 -> value is not ok)
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||82
 +
|}
 +
 +
: This byte represents which pulse counter input had correct data loaded. When byte.BIT7 (MSB)=1 -> Pulse Counter input 15 had a correct pulse counter loaded (Byte.BIT7=0 -> value is not ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 8 had a correct pulse counter loaded (Byte.BIT0=0 -> value is not ok)
 +
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 0||83-84
 +
|}
 +
 +
: This byte represents the next logging location. Event and error codes can be logged in FRAM (see page FRAM 53-58). If the logging location=0 then the 16 bytes will be written starting at FRAM location Byte53/Byte0, if byte=1 then the 16 bytes will be written at FRAM location Byte53/Byte16 etc
 +
: Byte83: logging_location.MSB
 +
: Byte84: logging_location.LSB
  
 
== Data output modules (Page 1-10) ==
 
== Data output modules (Page 1-10) ==
Line 139: Line 240:
 
: Byte 7 (or 39 or 71 ...): Dimmer value of output 6 of the concerning module
 
: Byte 7 (or 39 or 71 ...): Dimmer value of output 6 of the concerning module
 
: Byte 8 (or 40 or 72 ...): Dimmer value of output 7 of the concerning module
 
: Byte 8 (or 40 or 72 ...): Dimmer value of output 7 of the concerning module
: Byte 9 (or 41 or 73 ...): Output Unlock -> Represents the 8 bits for the 8 Outputs, BIT7 (MSB) -> Output 7 of this module, ..., BIT0 (LSB) -> Output 0 of this module. BITx=0 -> Output is locked, BITx=1 -> Output is unlocked.
+
: Byte 9 (or 41 or 73 ...): Output Unlock -> Represents the 8 bits for the 8 Outputs, BIT7 (MSB) -> Output 7 of this module, ..., BIT0 (LSB) -> Output 0 of this module. BITx=0 -> Output is unlocked, BITx=1 -> Output is locked.
  
 
== Data shutter modules (Page 11-19)==
 
== Data shutter modules (Page 11-19)==
Line 161: Line 262:
 
:** BIT0: =1-> direction UP, =0-> direction DOWN
 
:** BIT0: =1-> direction UP, =0-> direction DOWN
 
:** BIT1: =1-> shutter is locked, =0-> shutter is unlocked
 
:** BIT1: =1-> shutter is locked, =0-> shutter is unlocked
:* 2nd: Current shutter position (LSB)
+
:* 2nd: Current shutter position (MSB)
:* 3rd: Current shutter position (MSB)
+
:* 3rd: Current shutter position (LSB)
 
:* 4th: Open
 
:* 4th: Open
 
:* 5th: Open
 
:* 5th: Open
Line 186: Line 287:
 
:** BIT0: =1-> direction group UP, =0-> direction DOWN
 
:** BIT0: =1-> direction group UP, =0-> direction DOWN
 
:** BIT1: =1-> shutter group is locked, =0-> shutter group is unlocked
 
:** BIT1: =1-> shutter group is locked, =0-> shutter group is unlocked
:* 2nd: Current shutter group position (LSB)
+
:* 2nd: Current shutter group position (MSB)
:* 3rd: Current shutter group position (MSB)
+
:* 3rd: Current shutter group position (LSB)
 
:* 4th: Open
 
:* 4th: Open
 
:* 5th: Open
 
:* 5th: Open
Line 220: Line 321:
 
:* 4th: Not in use yet
 
:* 4th: Not in use yet
  
== Input data (Page 30-42)==
+
== Input data (Page 30-49)==
;Page 30-42 -> Contains the dynamic data for the input modules
+
;Page 30-49 -> Contains the dynamic data for the input modules
  
 
{| class="wikitable sortable" border="1"
 
{| class="wikitable sortable" border="1"
Line 227: Line 328:
 
| align="center" style="background:#f0f0f0;"|'''Byte'''
 
| align="center" style="background:#f0f0f0;"|'''Byte'''
 
|-
 
|-
| 30-42||0-255
+
| 30-49||0-255
 
|}
 
|}
 +
 +
Every page represents 4 input modules. Each input module has 64 byte in FRAM to store dynamic data like pulse counter information and others.
  
 
: Page 20 Byte 0-63: Information regarding Input Module 0
 
: Page 20 Byte 0-63: Information regarding Input Module 0
Line 239: Line 342:
 
=== Input UNLOCK ===
 
=== Input UNLOCK ===
  
Every Input can be locked or unlocked. 1 Byte in Eeprom per module is used to keep the state if an Input is locked or unlocked. Every bit of that byte represents 1 Input (MSB -> Highest Input, LSB -> Lowest Input). When BITx=1 then the Input is unlocked, when BITx=0 the Input is locked. When an Input is locked, the Input state will not change anymore until the Input is unlocked.
+
Every Input can be locked or unlocked. 1 Byte in Eeprom per module is used to keep the state if an Input is locked or unlocked. Every bit of that byte represents 1 Input (MSB -> Highest Input, LSB -> Lowest Input). When BITx=1 then the Input is locked, when BITx=0 the Input is unlocked. When an Input is locked, the Input state will not change anymore until the Input is unlocked.
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 30-49||0,64,128,192
 +
|}
 +
 
 +
:Byte 0 (and 64,128,192): Represents the 8 bits for the 8 Inputs, BIT7 (MSB) -> Input 7 of this module, ..., BIT0 (LSB) -> Input 0 of this module. BITx=0 -> Input is unlocked, BITx=1 -> Input is locked.
 +
 
 +
== Pulse Counter information (Page 50)==
 +
;Page 50 -> Contains the Pulse Counter information of the Inputs embedded on the Core/Core+
 +
 
 +
Pulse Counters of the internal inputs of the Core/Core+ are stored in FRAM memory. This information is stored twice (Bank 1 and 2) to avoid corruption when writing during a power failure. Each Pulse Counter consist of 4 bytes (the pulse counter) and 2 bytes (CRC16 calculated over the 4 bytes).
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 50||0-255
 +
|}
 +
 
 +
: Page 50 Byte 0-63: Pulse Counter information of the first 8 internal inputs - Bank 1
 +
: Page 50 Byte 64-127: Pulse Counter information of the first 8 internal inputs - Bank 2
 +
: Page 50 Byte 128-191: Pulse Counter information of the second 8 internal inputs - Bank 1 (Future use)
 +
: Page 50 Byte 192-255: Pulse Counter information of the second 8 internal inputs - Bank 2 (Future use)
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 50||0-63
 +
|}
 +
 
 +
;Input 0-7 Bank 1 (48 bytes used - 16 bytes free)
 +
 
 +
: Byte 0: Pulse counter Input 0 Byte 3 (MSB)
 +
: Byte 1: Pulse counter Input 0 Byte 2
 +
: Byte 2: Pulse counter Input 0 Byte 1
 +
: Byte 3: Pulse counter Input 0 Byte 0 (LSB)
 +
: Byte 4: CRC16 Input 0 Byte 1 (MSB)
 +
: Byte 5: CRC16 Input 0 Byte 0 (LSB)
 +
: Byte 6: Pulse counter Input 1 Byte 3 (MSB)
 +
: Byte 7: Pulse counter Input 1 Byte 2
 +
: Byte 8: Pulse counter Input 1 Byte 1
 +
: Byte 9: Pulse counter Input 1 Byte 0 (LSB)
 +
: Byte 10: CRC16 Input 1 Byte 1 (MSB)
 +
: Byte 11: CRC16 Input 1 Byte 0 (LSB)
 +
: ...
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 50||64-127
 +
|}
 +
 
 +
;Input 0-7 Bank 2 (48 bytes used - 16 bytes free)
 +
 
 +
: Byte 64: Pulse counter Input 0 Byte 3 (MSB)
 +
: Byte 65: Pulse counter Input 0 Byte 2
 +
: Byte 66: Pulse counter Input 0 Byte 1
 +
: Byte 67: Pulse counter Input 0 Byte 0 (LSB)
 +
: Byte 68: CRC16 Input 0 Byte 1 (MSB)
 +
: Byte 69: CRC16 Input 0 Byte 0 (LSB)
 +
: Byte 70: Pulse counter Input 1 Byte 3 (MSB)
 +
: Byte 71: Pulse counter Input 1 Byte 2
 +
: Byte 72: Pulse counter Input 1 Byte 1
 +
: Byte 73: Pulse counter Input 1 Byte 0 (LSB)
 +
: Byte 74: CRC16 Input 1 Byte 1 (MSB)
 +
: Byte 75: CRC16 Input 1 Byte 0 (LSB)
 +
: ...
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 50||128-191
 +
|}
 +
 
 +
;Input 8-15 Bank 1 (48 bytes used - 16 bytes free)
 +
 
 +
: Byte 128: Pulse counter Input 8 Byte 3 (MSB)
 +
: Byte 129: Pulse counter Input 8 Byte 2
 +
: Byte 130: Pulse counter Input 8 Byte 1
 +
: Byte 131: Pulse counter Input 8 Byte 0 (LSB)
 +
: Byte 132: CRC16 Input 8 Byte 1 (MSB)
 +
: Byte 133: CRC16 Input 8 Byte 0 (LSB)
 +
: Byte 134: Pulse counter Input 9 Byte 3 (MSB)
 +
: Byte 135: Pulse counter Input 9 Byte 2
 +
: Byte 136: Pulse counter Input 9 Byte 1
 +
: Byte 137: Pulse counter Input 9 Byte 0 (LSB)
 +
: Byte 138: CRC16 Input 9 Byte 1 (MSB)
 +
: Byte 139: CRC16 Input 9 Byte 0 (LSB)
 +
: ...
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 50||192-255
 +
|}
 +
 
 +
;Input 8-15 Bank 2 (48 bytes used - 16 bytes free)
 +
 
 +
: Byte 192: Pulse counter Input 8 Byte 3 (MSB)
 +
: Byte 193: Pulse counter Input 8 Byte 2
 +
: Byte 194: Pulse counter Input 8 Byte 1
 +
: Byte 195: Pulse counter Input 8 Byte 0 (LSB)
 +
: Byte 196: CRC16 Input 8 Byte 1 (MSB)
 +
: Byte 197: CRC16 Input 8 Byte 0 (LSB)
 +
: Byte 198: Pulse counter Input 9 Byte 3 (MSB)
 +
: Byte 199: Pulse counter Input 9 Byte 2
 +
: Byte 200: Pulse counter Input 9 Byte 1
 +
: Byte 201: Pulse counter Input 9 Byte 0 (LSB)
 +
: Byte 202: CRC16 Input 9 Byte 1 (MSB)
 +
: Byte 203: CRC16 Input 9 Byte 0 (LSB)
 +
: ...
 +
 
 +
== Temperature sensor Offset information (Page 51-52)==
 +
;Page 51 -> Contains the temperature Offset information for the temperature sensors
 +
;Page 52 -> Reserved for future expansion
 +
 
 +
128 Temperature sensors are available. Every temperature sensor has 2 bytes for the offset:
 +
* First byte: Offset as signed integer
 +
* Second byte: Inverted First byte
 +
These 2 bytes are used as a combination to make sure that the offset value hasn't been corrupted.
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 51||0-255
 +
|}
 +
 
 +
: Page 51 Byte 0-1: First and second byte for Offset of Temperature Sensor 0
 +
: Page 51 Byte 2-3: First and second byte for Offset of Temperature Sensor 1
 +
: Page 51 Byte 4-5: First and second byte for Offset of Temperature Sensor 2
 +
: Page 51 Byte 6-7: First and second byte for Offset of Temperature Sensor 3
 +
: ...
 +
 
 +
== Error and Event logging (Page 53-84)==
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 53-84||0-255
 +
|}
 +
 
 +
Some Error and Event codes (like health checker info, startup system, some errors) will be logged in FRAM. Each logging item consist of 16 bytes:
 +
* Date and Time: 6 bytes
 +
* Type of logging: 2 bytes
 +
* Event and error data: 8 bytes
 +
* 16 logging items per FRAM page, 32 pages: 512 logging items
 +
The logging location for the next logging item is written in FRAM at Page0/Byte83(MSB)-84(LSB): If the logging location=0 then the 16 bytes will be written starting at FRAM location Byte53/Byte0, if logging location=1 then the 16 bytes will be written at FRAM location Byte53/Byte16 etc. After each 16 byte write operation, the logging location is updated (Page 0/Byte83-84).
 +
 
 +
When all 16 FRAM pages are written, the oldest location is overwritten.
 +
 
 +
;Page 53 -> Contains 16 logging items
 +
;Page 54 -> Contains 16 logging items
 +
;Page 55 -> Contains 16 logging items
 +
;etc
  
 
{| class="wikitable sortable" border="1"
 
{| class="wikitable sortable" border="1"
Line 245: Line 510:
 
| align="center" style="background:#f0f0f0;"|'''Byte'''
 
| align="center" style="background:#f0f0f0;"|'''Byte'''
 
|-
 
|-
| 30-42||0,64,128,192
+
| 53||0-15
 
|}
 
|}
  
:Byte 0 (and 64,128,192): Represents the 8 bits for the 8 Inputs, BIT7 (MSB) -> Input 7 of this module, ..., BIT0 (LSB) -> Input 0 of this module. BITx=0 -> Input is locked, BITx=1 -> Input is unlocked.
+
: Page 53 Byte 0: Year
 +
: Page 51 Byte 1: Month
 +
: Page 51 Byte 2: Day
 +
: Page 51 Byte 3: Hour
 +
: Page 51 Byte 4: Minute
 +
: Page 51 Byte 5: Second
 +
: Page 51 Byte 6: Logging Type1
 +
: Page 51 Byte 7: Logging Type2
 +
: Page 51 Byte 8-15: Data0-7
 +
 
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 53||16-31
 +
|}
 +
 
 +
: Page 53 Byte 16: Year
 +
: Page 51 Byte 17: Month
 +
: Page 51 Byte 18: Day
 +
: Page 51 Byte 19: Hour
 +
: Page 51 Byte 20: Minute
 +
: Page 51 Byte 21: Second
 +
: Page 51 Byte 22: Logging Type1
 +
: Page 51 Byte 23: Logging Type2
 +
: Page 51 Byte 24-31: Data0-7 
 +
 
 +
...
 +
 
 +
Note:
 +
* If Logging Type1='E' and Logging Type2='V' -> Event
 +
* If Logging Type1='E' and Logging Type2='R' -> Error
 +
* If Logging Type1='B' and Logging Type2='A' -> Basic Action
 +
 
 +
== uCAN led status (Page 83-86) - Not implemented==
 +
{| class="wikitable sortable" border="1"
 +
| align="center" style="background:#f0f0f0;"|'''Page'''
 +
| align="center" style="background:#f0f0f0;"|'''Byte'''
 +
|-
 +
| 83-86||0-255
 +
|}
 +
 
 +
: Page83/Byte0: Led brightness (0-255) of CAN led 0
 +
: Page83/Byte1: Led function of CAN led 0
 +
: Page83/Byte2: Led brightness (0-255) of CAN led 1
 +
: Page83/Byte3: Led function of CAN led 1
 +
: Page83/Byte4: Led brightness (0-255) of CAN led 2
 +
: Page83/Byte5: Led function of CAN led 2
 +
:...
 +
: Page83/Byte254: Led brightness (0-255) of CAN led 127
 +
: Page83/Byte255: Led function of CAN led 127
 +
: Page84/Byte0: Led brightness (0-255) of CAN led 127
 +
: Page84/Byte1: Led function of CAN led 128
 +
: Page84/Byte2: Led brightness (0-255) of CAN led 128
 +
: Page84/Byte3: Led function of CAN led 128
 +
:...
 +
 
 +
== BB reserved pages (Page 126-127)==
 +
 
 +
These 2 pages are reserved for setting and logging information of the BB.

Latest revision as of 13:16, 20 June 2021

Introduction

The AIO has an onboard FRAM (FM24W256 - 128 pages of 256 bytes) connected via I2C to the DSPIC33E (The Master). FRAM is used to keep track of the real-time changes, Eeprom is used to store the settings. This document describes the FRAM memory locations used.

General Configuration Bytes (Page 0)

Page 0 -> General data
Page Byte
0 64
This byte represents the hour (time) of the last system startup.
Page Byte
0 65
This byte represents the minute (time) of the last system startup.
Page Byte
0 66
This byte represents the second (time) of the last system startup.
Page Byte
0 67
This byte represents the day (date) of the last system startup.
Page Byte
0 68
This byte represents the month (date) of the last system startup.
Page Byte
0 69
This byte represents the year (date) of the last system startup.
Page Byte
0 70-72
These 3 bytes represents the number of hours this system is ON. Byte 70 is the MSB (Most Significant Byte), Byte 72 is the LSB (Least Significant Byte).
Page Byte
0 73
This byte represents the hour (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 74
This byte represents the minute (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 75
This byte represents the second (time) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 76
This byte represents the day (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 77
This byte represents the month (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 78
This byte represents the year (date) of the last system startup with integrity problems of the pulse counters. If never an integrity problem happened, this value will be 0.
Page Byte
0 79
This byte represents which pulse counter input had an integrity problem. When byte.BIT7 (MSB)=1 -> Pulse Counter input 7 had an integrity problem (Byte.BIT7=0 -> value is ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 0 had an integrity problem (Byte.BIT0=0 -> value is ok)
Page Byte
0 80
This byte represents which pulse counter input had an integrity problem. When byte.BIT7 (MSB)=1 -> Pulse Counter input 15 had an integrity problem (Byte.BIT7=0 -> value is ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 8 had an integrity problem (Byte.BIT0=0 -> value is ok)
Page Byte
0 81
This byte represents which pulse counter input had correct data loaded. When byte.BIT7 (MSB)=1 -> Pulse Counter input 7 had a correct pulse counter loaded (Byte.BIT7=0 -> value is not ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 0 had a correct pulse counter loaded (Byte.BIT0=0 -> value is not ok)
Page Byte
0 82
This byte represents which pulse counter input had correct data loaded. When byte.BIT7 (MSB)=1 -> Pulse Counter input 15 had a correct pulse counter loaded (Byte.BIT7=0 -> value is not ok), when byte.BIT0 (LSB)=1 -> Pulse Counter input 8 had a correct pulse counter loaded (Byte.BIT0=0 -> value is not ok)
Page Byte
0 83-84
This byte represents the next logging location. Event and error codes can be logged in FRAM (see page FRAM 53-58). If the logging location=0 then the 16 bytes will be written starting at FRAM location Byte53/Byte0, if byte=1 then the 16 bytes will be written at FRAM location Byte53/Byte16 etc
Byte83: logging_location.MSB
Byte84: logging_location.LSB

Data output modules (Page 1-10)

Page 1 – 10 -> Contains data of the output modules, 32 bytes per module, 8 modules per page, 10 pages (80 modules maximum, 640 outputs -> 0-639)
Page Byte
1 x
This page is entirely used for output module 0-7:
* Module 0: Byte0..31
* Module 1: Byte32..63
* ...
Page Byte
2 x
This page is entirely used for output module 8-15:
* Module 8: Byte0..31
* Module 9: Byte32..63
* ...
Page Byte
3 x
This page is entirely used for output module 16-23:
* Module 16: Byte0..31
* Module 17: Byte32..63
* ...

...

Page Byte
10 x
This page is entirely used for output module 72-79:
* Module 72: Byte0..31
* Module 73: Byte32..63
* ...

Following Module structure is used:

Page Byte
1-10 x
Byte 0 (or 32 or 64 ...): Output state of this output (8 outputs, 1 bit per output, 0=OFF, 1=ON)
Byte 1 (or 33 or 65 ...): Dimmer value of output 0 of the concerning module
Byte 2 (or 34 or 66 ...): Dimmer value of output 1 of the concerning module
Byte 3 (or 35 or 67 ...): Dimmer value of output 2 of the concerning module
Byte 4 (or 36 or 68 ...): Dimmer value of output 3 of the concerning module
Byte 5 (or 37 or 69 ...): Dimmer value of output 4 of the concerning module
Byte 6 (or 38 or 70 ...): Dimmer value of output 5 of the concerning module
Byte 7 (or 39 or 71 ...): Dimmer value of output 6 of the concerning module
Byte 8 (or 40 or 72 ...): Dimmer value of output 7 of the concerning module
Byte 9 (or 41 or 73 ...): Output Unlock -> Represents the 8 bits for the 8 Outputs, BIT7 (MSB) -> Output 7 of this module, ..., BIT0 (LSB) -> Output 0 of this module. BITx=0 -> Output is unlocked, BITx=1 -> Output is locked.

Data shutter modules (Page 11-19)

Page 11-19 -> Contains the real live (not configuration) data of a shutter and Shutter Group
Page Byte
11-18 0-255
Page 11 Byte 0-7: Information regarding Shutter 0
Page 11 Byte 8-15: Information regarding Shutter 1
Page 11 Byte 16-23: Information regarding Shutter 2
...
Page 18 Byte 248-255: Information regarding Shutter 255

Every Roller/Shutter has 8 bytes:

  • 1st byte: Shutter status
    • BIT0: =1-> direction UP, =0-> direction DOWN
    • BIT1: =1-> shutter is locked, =0-> shutter is unlocked
  • 2nd: Current shutter position (MSB)
  • 3rd: Current shutter position (LSB)
  • 4th: Open
  • 5th: Open
  • 6th: Open
  • 7th: Open
  • 8th: Open
Page Byte
19 0-255
Page 19 Byte 0-7: Information regarding Shutter Group 0
Page 19 Byte 8-15: Information regarding Shutter Group 1
Page 19 Byte 16-23: Information regarding Shutter Group 2
...
Page 19 Byte 248-255: Information regarding Shutter Group 31

Every Shutter Group has 8 bytes:

  • 1st byte: Shutter Group status
    • BIT0: =1-> direction group UP, =0-> direction DOWN
    • BIT1: =1-> shutter group is locked, =0-> shutter group is unlocked
  • 2nd: Current shutter group position (MSB)
  • 3rd: Current shutter group position (LSB)
  • 4th: Open
  • 5th: Open
  • 6th: Open
  • 7th: Open
  • 8th: Open

Timer data (Page 20-29)

Page 20-29 -> Contains the timer data of each timer output
Page Byte
20-29 0-255
Page 20 Byte 0-3: Information regarding Output 0
Page 20 Byte 4-7: Information regarding Output 1
Page 20 Byte 8-11: Information regarding Output 2
...
Page 29 Byte 252-255: Information regarding Output 639

Every Output has 4 bytes:

  • 1st: Timer Type:
    • 0-> No Timer
    • 1-> 100ms Time
    • 2-> 1s timer
    • 3-> 1m (minute) timer
  • 2nd: Timer value MSB (Most Significant Byte)
  • 3rd: Timer value LSB (Least Significant Byte)
  • 4th: Not in use yet

Input data (Page 30-49)

Page 30-49 -> Contains the dynamic data for the input modules
Page Byte
30-49 0-255

Every page represents 4 input modules. Each input module has 64 byte in FRAM to store dynamic data like pulse counter information and others.

Page 20 Byte 0-63: Information regarding Input Module 0
Page 20 Byte 64-127: Information regarding Input Module 2
Page 20 Byte 128-191: Information regarding Input Module 3
...
Page 21 Byte 0-63: Information regarding Input Module 5
...

Input UNLOCK

Every Input can be locked or unlocked. 1 Byte in Eeprom per module is used to keep the state if an Input is locked or unlocked. Every bit of that byte represents 1 Input (MSB -> Highest Input, LSB -> Lowest Input). When BITx=1 then the Input is locked, when BITx=0 the Input is unlocked. When an Input is locked, the Input state will not change anymore until the Input is unlocked.

Page Byte
30-49 0,64,128,192
Byte 0 (and 64,128,192): Represents the 8 bits for the 8 Inputs, BIT7 (MSB) -> Input 7 of this module, ..., BIT0 (LSB) -> Input 0 of this module. BITx=0 -> Input is unlocked, BITx=1 -> Input is locked.

Pulse Counter information (Page 50)

Page 50 -> Contains the Pulse Counter information of the Inputs embedded on the Core/Core+

Pulse Counters of the internal inputs of the Core/Core+ are stored in FRAM memory. This information is stored twice (Bank 1 and 2) to avoid corruption when writing during a power failure. Each Pulse Counter consist of 4 bytes (the pulse counter) and 2 bytes (CRC16 calculated over the 4 bytes).

Page Byte
50 0-255
Page 50 Byte 0-63: Pulse Counter information of the first 8 internal inputs - Bank 1
Page 50 Byte 64-127: Pulse Counter information of the first 8 internal inputs - Bank 2
Page 50 Byte 128-191: Pulse Counter information of the second 8 internal inputs - Bank 1 (Future use)
Page 50 Byte 192-255: Pulse Counter information of the second 8 internal inputs - Bank 2 (Future use)
Page Byte
50 0-63
Input 0-7 Bank 1 (48 bytes used - 16 bytes free)
Byte 0: Pulse counter Input 0 Byte 3 (MSB)
Byte 1: Pulse counter Input 0 Byte 2
Byte 2: Pulse counter Input 0 Byte 1
Byte 3: Pulse counter Input 0 Byte 0 (LSB)
Byte 4: CRC16 Input 0 Byte 1 (MSB)
Byte 5: CRC16 Input 0 Byte 0 (LSB)
Byte 6: Pulse counter Input 1 Byte 3 (MSB)
Byte 7: Pulse counter Input 1 Byte 2
Byte 8: Pulse counter Input 1 Byte 1
Byte 9: Pulse counter Input 1 Byte 0 (LSB)
Byte 10: CRC16 Input 1 Byte 1 (MSB)
Byte 11: CRC16 Input 1 Byte 0 (LSB)
...
Page Byte
50 64-127
Input 0-7 Bank 2 (48 bytes used - 16 bytes free)
Byte 64: Pulse counter Input 0 Byte 3 (MSB)
Byte 65: Pulse counter Input 0 Byte 2
Byte 66: Pulse counter Input 0 Byte 1
Byte 67: Pulse counter Input 0 Byte 0 (LSB)
Byte 68: CRC16 Input 0 Byte 1 (MSB)
Byte 69: CRC16 Input 0 Byte 0 (LSB)
Byte 70: Pulse counter Input 1 Byte 3 (MSB)
Byte 71: Pulse counter Input 1 Byte 2
Byte 72: Pulse counter Input 1 Byte 1
Byte 73: Pulse counter Input 1 Byte 0 (LSB)
Byte 74: CRC16 Input 1 Byte 1 (MSB)
Byte 75: CRC16 Input 1 Byte 0 (LSB)
...
Page Byte
50 128-191
Input 8-15 Bank 1 (48 bytes used - 16 bytes free)
Byte 128: Pulse counter Input 8 Byte 3 (MSB)
Byte 129: Pulse counter Input 8 Byte 2
Byte 130: Pulse counter Input 8 Byte 1
Byte 131: Pulse counter Input 8 Byte 0 (LSB)
Byte 132: CRC16 Input 8 Byte 1 (MSB)
Byte 133: CRC16 Input 8 Byte 0 (LSB)
Byte 134: Pulse counter Input 9 Byte 3 (MSB)
Byte 135: Pulse counter Input 9 Byte 2
Byte 136: Pulse counter Input 9 Byte 1
Byte 137: Pulse counter Input 9 Byte 0 (LSB)
Byte 138: CRC16 Input 9 Byte 1 (MSB)
Byte 139: CRC16 Input 9 Byte 0 (LSB)
...
Page Byte
50 192-255
Input 8-15 Bank 2 (48 bytes used - 16 bytes free)
Byte 192: Pulse counter Input 8 Byte 3 (MSB)
Byte 193: Pulse counter Input 8 Byte 2
Byte 194: Pulse counter Input 8 Byte 1
Byte 195: Pulse counter Input 8 Byte 0 (LSB)
Byte 196: CRC16 Input 8 Byte 1 (MSB)
Byte 197: CRC16 Input 8 Byte 0 (LSB)
Byte 198: Pulse counter Input 9 Byte 3 (MSB)
Byte 199: Pulse counter Input 9 Byte 2
Byte 200: Pulse counter Input 9 Byte 1
Byte 201: Pulse counter Input 9 Byte 0 (LSB)
Byte 202: CRC16 Input 9 Byte 1 (MSB)
Byte 203: CRC16 Input 9 Byte 0 (LSB)
...

Temperature sensor Offset information (Page 51-52)

Page 51 -> Contains the temperature Offset information for the temperature sensors
Page 52 -> Reserved for future expansion

128 Temperature sensors are available. Every temperature sensor has 2 bytes for the offset:

  • First byte: Offset as signed integer
  • Second byte: Inverted First byte

These 2 bytes are used as a combination to make sure that the offset value hasn't been corrupted.

Page Byte
51 0-255
Page 51 Byte 0-1: First and second byte for Offset of Temperature Sensor 0
Page 51 Byte 2-3: First and second byte for Offset of Temperature Sensor 1
Page 51 Byte 4-5: First and second byte for Offset of Temperature Sensor 2
Page 51 Byte 6-7: First and second byte for Offset of Temperature Sensor 3
...

Error and Event logging (Page 53-84)

Page Byte
53-84 0-255

Some Error and Event codes (like health checker info, startup system, some errors) will be logged in FRAM. Each logging item consist of 16 bytes:

  • Date and Time: 6 bytes
  • Type of logging: 2 bytes
  • Event and error data: 8 bytes
  • 16 logging items per FRAM page, 32 pages: 512 logging items

The logging location for the next logging item is written in FRAM at Page0/Byte83(MSB)-84(LSB): If the logging location=0 then the 16 bytes will be written starting at FRAM location Byte53/Byte0, if logging location=1 then the 16 bytes will be written at FRAM location Byte53/Byte16 etc. After each 16 byte write operation, the logging location is updated (Page 0/Byte83-84).

When all 16 FRAM pages are written, the oldest location is overwritten.

Page 53 -> Contains 16 logging items
Page 54 -> Contains 16 logging items
Page 55 -> Contains 16 logging items
etc
Page Byte
53 0-15
Page 53 Byte 0: Year
Page 51 Byte 1: Month
Page 51 Byte 2: Day
Page 51 Byte 3: Hour
Page 51 Byte 4: Minute
Page 51 Byte 5: Second
Page 51 Byte 6: Logging Type1
Page 51 Byte 7: Logging Type2
Page 51 Byte 8-15: Data0-7
Page Byte
53 16-31
Page 53 Byte 16: Year
Page 51 Byte 17: Month
Page 51 Byte 18: Day
Page 51 Byte 19: Hour
Page 51 Byte 20: Minute
Page 51 Byte 21: Second
Page 51 Byte 22: Logging Type1
Page 51 Byte 23: Logging Type2
Page 51 Byte 24-31: Data0-7

...

Note:

  • If Logging Type1='E' and Logging Type2='V' -> Event
  • If Logging Type1='E' and Logging Type2='R' -> Error
  • If Logging Type1='B' and Logging Type2='A' -> Basic Action

uCAN led status (Page 83-86) - Not implemented

Page Byte
83-86 0-255
Page83/Byte0: Led brightness (0-255) of CAN led 0
Page83/Byte1: Led function of CAN led 0
Page83/Byte2: Led brightness (0-255) of CAN led 1
Page83/Byte3: Led function of CAN led 1
Page83/Byte4: Led brightness (0-255) of CAN led 2
Page83/Byte5: Led function of CAN led 2
...
Page83/Byte254: Led brightness (0-255) of CAN led 127
Page83/Byte255: Led function of CAN led 127
Page84/Byte0: Led brightness (0-255) of CAN led 127
Page84/Byte1: Led function of CAN led 128
Page84/Byte2: Led brightness (0-255) of CAN led 128
Page84/Byte3: Led function of CAN led 128
...

BB reserved pages (Page 126-127)

These 2 pages are reserved for setting and logging information of the BB.