Difference between revisions of "FRAM Model AIO"

From OpenMotics
Jump to navigation Jump to search
Line 290: Line 290:
 
: Byte 10: CRC16 Input 1 Byte 1 (MSB)
 
: Byte 10: CRC16 Input 1 Byte 1 (MSB)
 
: Byte 11: CRC16 Input 1 Byte 0 (LSB)
 
: 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
 +
 +
: 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)
 
: ...
 
: ...

Revision as of 14:14, 20 September 2020

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.

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).

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
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
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)
...