Router Configuration port access/configuration ... - SpaceWire
Router Configuration port access/configuration ... - SpaceWire
Router Configuration port access/configuration ... - SpaceWire
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>SpaceWire</strong> <strong>Router</strong><br />
<strong>Configuration</strong> Protocol<br />
<strong>SpaceWire</strong> Working Group<br />
Steve Parkes,<br />
Chris McClements,<br />
Martin Dunstan,<br />
University of Dundee
Contents<br />
! <strong>SpaceWire</strong> <strong>Router</strong><br />
! <strong>Configuration</strong> Protocol<br />
– Read Register<br />
– Write Register<br />
! FEIC<br />
– Protocol Extensions<br />
! Requirements
<strong>SpaceWire</strong> Network<br />
MEMORY<br />
1<br />
SENSOR 1<br />
2<br />
1<br />
3 4<br />
ROUTER<br />
1<br />
5<br />
6<br />
7<br />
8<br />
P 1 P 2<br />
SENSOR 2<br />
1<br />
2<br />
ROUTER<br />
2<br />
3 4<br />
MEMORY<br />
2<br />
8<br />
7<br />
6<br />
5<br />
P 3 P 4<br />
Processor Array
<strong>SpaceWire</strong> Network<br />
MEMORY<br />
1<br />
SENSOR 1<br />
RR<br />
RR<br />
RR<br />
P 1 P 2<br />
SENSOR 2<br />
RR<br />
RR<br />
MEMORY<br />
2<br />
RR<br />
P 3 P 4<br />
Processor Array
<strong>SpaceWire</strong><br />
Interfaces<br />
<strong>SpaceWire</strong><br />
Port 1<br />
<strong>SpaceWire</strong><br />
Port 2<br />
<strong>SpaceWire</strong><br />
Port 3<br />
<strong>SpaceWire</strong><br />
Port 4<br />
<strong>SpaceWire</strong><br />
Port 5<br />
<strong>SpaceWire</strong><br />
Port 6<br />
<strong>SpaceWire</strong><br />
Port 7<br />
<strong>SpaceWire</strong><br />
Port 8<br />
Control<br />
Logic<br />
Non-blocking<br />
Crossbar<br />
Switch<br />
Routing<br />
Table<br />
Status/Error<br />
Registers<br />
Control<br />
Registers<br />
<strong>Configuration</strong><br />
Port<br />
Status<br />
Outputs<br />
External<br />
Input/Output<br />
External<br />
Input/Output<br />
Input FIFO<br />
Output FIFO<br />
External Port<br />
Input FIFO<br />
Output FIFO<br />
External Port<br />
Tick<br />
Counter<br />
Time-Code<br />
Inputs/Outputs
<strong>Configuration</strong> Port and Registers<br />
CONTROL<br />
REGISTERS<br />
CONFIGURATION<br />
PORT<br />
CONFIGURATION BUS<br />
LINK<br />
REGISTER LINK<br />
REGISTER LINK<br />
REGISTER<br />
ROUTING<br />
TABLE<br />
ROUTING<br />
(224<br />
TABLE<br />
ADDR) ROUTING<br />
TABLE
<strong>Configuration</strong> Packet Formats<br />
<strong>Configuration</strong> write packets:<br />
PATH<br />
ADDR<br />
PRCOL<br />
RETURN<br />
ADDR<br />
CMD<br />
REG<br />
ADDR<br />
DATA CHKSUM EOP<br />
<strong>Configuration</strong> read packets:<br />
PATH<br />
ADDR<br />
PRCOL<br />
RETURN<br />
ADDR<br />
CMD<br />
REG<br />
ADDR<br />
CHKSUM EOP<br />
<strong>Configuration</strong> write and read reply packets:<br />
PATH<br />
ADDR<br />
CMD<br />
REG<br />
ADDR<br />
ACK/<br />
DATA CHKSUM EOP<br />
NACK
<strong>Configuration</strong> Packet Formats<br />
The <strong>configuration</strong> commands have the following format:<br />
7<br />
0<br />
1 RSV RSV RSV RSV A8 RD WR<br />
WR is the write flag, when set the command is a write command.<br />
RD is the read flag, when set the command is a read command.<br />
A8 is the most significant bit of the 9-bit <strong>configuration</strong> register address.<br />
RSV represents reserved bits.
Checksum Coverage<br />
PATH<br />
ADDR PRCOL RET<br />
CMD REG<br />
ADDR<br />
ADDR<br />
DATA<br />
CHK<br />
SUM<br />
EOP<br />
CHECKSUM COVERAGE
Write<br />
Command<br />
<strong>Configuration</strong> Port<br />
Destination Address<br />
Protocol<br />
Write Address<br />
Write Command<br />
Return Address<br />
Write Data<br />
Checksum<br />
COMMAND<br />
6<br />
2<br />
0<br />
32<br />
3<br />
8<br />
WR<br />
ADR DA0<br />
DA1 DA2 DA3 CHKEOP<br />
REPLY<br />
5<br />
3<br />
8<br />
WR<br />
ADR DA0<br />
DA1 DA2 DA3 ACKCHK<br />
EOP<br />
Return Port<br />
Return Address<br />
Copy Write Command<br />
Copy Write Address<br />
Copy Write Data<br />
ACK/NACK<br />
New Checksum
Read<br />
Command<br />
<strong>Configuration</strong> Port<br />
Destination Address<br />
Protocol<br />
Checksum<br />
Write Address<br />
Read Command<br />
Return Address<br />
COMMAND<br />
6<br />
2<br />
0<br />
32<br />
3<br />
8<br />
RD<br />
ADR CHKEOP<br />
REPLY<br />
5 3 8 RD ADR DA0 DA1 DA2 DA3 ACKCHK<br />
EOP<br />
Return Port<br />
Return Address<br />
Copy Read Command<br />
Copy Read Address<br />
Read Data<br />
ACK/NACK<br />
New Checksum
Autonomous Planetary Landers<br />
Position<br />
Initialisation<br />
Surface<br />
Relative<br />
Navigation<br />
Hazard<br />
Detection<br />
Touch-down
Feature Tracking<br />
“Landmark”<br />
Tracking<br />
Target<br />
Landing<br />
Site
Feature Extraction IC<br />
Camera Control<br />
<strong>SpaceWire</strong><br />
Mini-<strong>Router</strong><br />
Image<br />
Memory<br />
Feature<br />
Detection<br />
Local<br />
Maximum<br />
Feature<br />
Tracking<br />
Selection<br />
Feature<br />
List<br />
Manage<br />
FEIC
FEIC Video
Feature Extraction IC<br />
Camera Control<br />
Download Test Image (DMA)<br />
<strong>SpaceWire</strong><br />
Mini-<strong>Router</strong><br />
Signal Event<br />
Transfer Feature List<br />
Read/Write Control/<strong>Configuration</strong> Registers<br />
Image<br />
Memory<br />
Feature<br />
Detection<br />
Local<br />
Maximum<br />
Feature<br />
Tracking<br />
Selection<br />
Feature<br />
List<br />
Manage<br />
FEIC
FEIC Requirements<br />
! Needed to extend the set of <strong>configuration</strong><br />
commands<br />
! Write data block to consecutive registers<br />
! Write data block to one register (DMA)<br />
! Signal event from FEIC
Controlling the FEIC<br />
! All interaction is via registers:<br />
– executable command registers<br />
– write-only <strong>configuration</strong> registers<br />
– read-only status/information registers<br />
– read-write <strong>configuration</strong> registers<br />
! Example: reading LN list of new points:<br />
– write to the “send-LN<br />
LN-list” register<br />
– FEIC will send the data later (but ASAP)
<strong>SpaceWire</strong> Interface<br />
! Use router <strong>configuration</strong> packet format:<br />
! Each packet defines a register operation:<br />
– read/write from/to one 32-bit register<br />
– write to consecutive 32-bit registers<br />
! improve throughput for burst writes<br />
– write multiple to one register (e.g.(<br />
DMA)
Command Byte (1)<br />
1 F1 F0 C2 A9 A8 C1 C0<br />
C2<br />
C1<br />
C0<br />
Description<br />
0<br />
0<br />
0<br />
Not valid<br />
0<br />
0<br />
1<br />
Write single 32-bit register<br />
0<br />
1<br />
0<br />
Read single 32-bit register<br />
0<br />
1<br />
1<br />
Read-modify<br />
modify-write (not used in FEIC)<br />
1<br />
0<br />
0<br />
Write multiple to one register (DMA)<br />
1<br />
0<br />
1<br />
Write multiple to consecutive registers<br />
1<br />
1<br />
0<br />
List/event packet from FEIC<br />
1<br />
1<br />
1<br />
Not valid
Command Byte (2)<br />
1 F1 F0 C2 A9 A8 C1 C0<br />
! The F0/F1 bits are for fill bytes:<br />
– indicate the number of padding bytes<br />
– padding is between payload and checksum<br />
– helps RISC CPUs (memory alignment)<br />
! The A8/A9 bits are register address bits:<br />
– FEIC has a 10-bit address space<br />
– register address byte contains bits 0-70<br />
– command byte has bits 8 and 9
Command Packets (to FEIC)<br />
Checksum coverage<br />
Target<br />
Address<br />
Protocol<br />
Return<br />
Address<br />
Command<br />
Register<br />
Address<br />
Checksum EOP<br />
Target<br />
Address<br />
Return<br />
Address<br />
Data<br />
Data<br />
Data<br />
Data
Data Packets from FEIC<br />
Checksum coverage<br />
Leading<br />
zeros<br />
are<br />
dropped<br />
by<br />
FEIC<br />
Target<br />
Address<br />
Target<br />
Address<br />
Target<br />
Address<br />
Target<br />
Address<br />
Command<br />
(0x92)<br />
Payload<br />
Type<br />
Payload<br />
Payload<br />
Payload<br />
Payload<br />
Checksum EOP<br />
Payload
Write Multiple<br />
Command<br />
<strong>Configuration</strong> Port<br />
Destination Address<br />
Protocol<br />
Write Address<br />
Write Command<br />
Return Address<br />
Write Data<br />
Checksum<br />
CMD<br />
DA1<br />
REPLY<br />
RP<br />
DA2<br />
RA1<br />
DP<br />
RA2<br />
PI<br />
WR<br />
RA1 RA2<br />
ADR D0<br />
WR ADR D0<br />
D1 D2 D3<br />
D1 …. DN-1<br />
ACKCHK<br />
EOP<br />
FILLCHKEOP<br />
Return Port<br />
Return Address<br />
Copy Write Command<br />
Copy Write Address<br />
Copy Write Data<br />
ACK/NACK<br />
New Checksum
Requirements<br />
! Read/Write Register (32-bit register)<br />
! Read/Modify/Write Register<br />
! Write to block of registers (start address, length?)<br />
! Read from block of registers (start address, length)<br />
! DMA Write Block of Data (start address, length?)<br />
! DMA Read Block of Data (start address, length)<br />
! Signal Event<br />
! Send Data Block on Event<br />
! For single register commands<br />
– can buffer and check checksum before actually writing data<br />
! When transferring large blocks<br />
– cannot buffer and check first,<br />
– just flag error at end of transfer<br />
– if there was an error.<br />
– Use of intermediate checksums?<br />
! CRC or checksum?