Octanis 1 Main Board

Pin configuration

This is the newest pin configuration. In the source code, in MSP432xxxx.h, undefine VERSION_0_5 to use this configuration. For old boards: Link to old pin configuration (v0.5 and older)

Colour code

Capture/Compare pin; PWM output
GPIO with interrupt
  • PM = “port mappable”
  • R: = “remapped to …”
  • TAx.x means that the functionality was mapped to another pin


(Pin row from left to right)

P10.2 Avoid_Obstacle_ON Geiger counter P1.0
GND Geiger turn ON/OFF P9.5
PJ.4 PJ.5
P7.2 Wind_sensor_sleep Wind_sensor_IN P7.3 (R: TA0.1)
P7.0 (R: TA0.2) Ultrasonic_IN6 Ultrasonic_IN7 P7.1 (R:TA0.3)
PJ.2 + NMOS Ultrasonic_trigger0 Ultrasonic_trigger1 PJ.3 +NMOS
P6.6, TA2.3 Ultrasonic_IN0 Ultrasonic_IN5 P6.7, TA2.4
P5.6 TA2.1 Ultrasonic_IN4 Ultrasonic_IN1 P5.7, TA2.2
P9.2, TA3.3 Ultrasonic_IN2 Ultrasonic_IN3 P9.3, TA3.4


(Pin row from left to right)

P2.5 (TA0.2) (PM) EPS interrupt input P2.4 (TA0.1) (PM)
P2.7 (TA0.4) (PM) P2.6 (TA0.3) (PM)
P10.5 (TA3.1) P10.4 (TA3.0)
P7.4 (TA1.4) (PM) Rockblock SLEEP Rockblock NET P2.1 (PM)
P7.6 (TA1.2) (PM) P7.5 (TA1.3)(PM)


(Pin row from left to right)

AGND Strut_rotation sensor 1 A1 (P5.4)
A2 (P5.3) Strut_rotation sensor 2 Strut_rotation sensor 3 A3 (P5.2)
A4 (P5.1) Strut_rotation sensor 4 A5 (P5.0)
A6 (P4.7) A7 (P4.6)
A8 (P4.5) A9 (P4.4)

Motors 1-4 (bottom side of the board)

(Pin row from left to right)

M1234_sleep P8.7
M1+ (EN=P9.1) front left
M1- (PH=P9.0)
M2+ (EN=P6.1) front right
M2- (PH=P6.0)
M3+ (EN=P4.1) rear left
M3- (PH=P4.0)
M4+ (EN=P4.3) rear right
M4- (PH=P4.2)

Motors 5-8 (right side of the board)

(Pin row from top to bottom)

M5678_sleep P3.1
M5678_curr_sense_en P8.6
M8- (IN2=P3.7, PM) rear_right
M8+ (IN1=P3.6, R:TA1.4; PWM) curr_sense input: A20 (P8.5)
M7- (IN2=P3.5, PM) rear_left
M7+ ( IN1=P3.4, R:TA1.3; PWM) curr_sense input: A21 (P8.4)
M6- (IN2=P3.0, PM) front_right
M6+ (IN1=P7.7, R:TA1.2; PWM) curr_sense input: A22 (P8.3)
M5- (IN2=P7.6, PM) front_left
M5+ (IN1=P7.5, TA1.1; PWM) curr_sense input: A23 (P8.2)

UART pins

(Pin row from left to right)

5V UART2 Rockblock

Item Timing
IMU 100ms - threshold check
  60s - log
EnvSensors 60s - threshold check 
300s - log
Scan 100ms - threshold check
10s - log (for map planner)
PathPlan 10s - threshold check (GPS, compass)
300s - get ISS depth data

protobuf will be the format for messages. Messages going from the microcontroller to the Iridium modem will be sent protobuf encoded and received by a webserver decoding the message. See also nanopb for microcontrollers.

The different message types are:

To generated a new protobuf definition, follow this procedure:

  1. Nanopb uses the Google's protoc compiler to parse the .proto file, and then a python script to generate the C header and source code from it:
user@host:~$ protoc -omessage.pb message.proto
user@host:~$ python ../generator/nanopb_generator.py message.pb
Writing to message.h and message.c


  • The mainboard expects the rover EPS to be an I2C slave.
  • The mainboard will poll for battery and current values.
  • The EPS will be connected to the reset pin of the mainboard.
  • The EPS has the ability to turn the mainboard completely on and off.
  • The EPS has the ability to put the mainboard into deep sleep mode (GPIO_SLEEP)
  • The EPS has the ability to wake the mainboard from deep sleep mode.
  • The mainboard will send a command to the EPS to switch on/off one of the 3 modules (the tps202x switches)

I2C Implementation

  • EPS Address: 0x90