# Firmware for controllers of thermal sensors Make regular scan of 8 sensors' pairs. USART speed 115200. Code for ../../kicad/stm32 ### Serial interface commands (ends with '\n'): - **0...9** - wait measurements of T from Nth controller (0==T for master) - **A** send everybody to start T measurement - **B** send dummy CAN messages to broadcast address - **C** show coefficients for all thermosensors - **D** send dummy CAN messages to master (0) address - **E** end temperature scan - **F** turn sensors off - **G** get CAN address - **H** switch I2C to high speed (100kHz) - **I** reinit CAN - **L** switch I2C to low speed (default, 10kHz) - **O** turn sensors on - **P** ping everyone over CAN - **R** reinit I2C - **S** start temperature scan - **T** start single temperature measurement - **V** very low speed - **Z** get sensors state over CAN ### PINOUT - I2C: PB6 (SCL) & PB7 (SDA) - USART1: PA9 (Tx) & PA10 (Rx) - CAN bus: PB8 (Rx), PB9 (Tx) - USB bus: PA11 (DM), PA12 (DP) - I2C multiplexer: PB0..PB2 (0..2 address bits), PB12 (~EN) - sensors' power: PB3 (in, overcurrent), PA8 (out, enable power) - signal LEDs: PB10 (LED0), PB11 (LED1) - ADC inputs: PA0 (V12/4.93), PA1 (V5/2), PA3 (I12 - 1V/A), PA6 (V3.3/2) - controller CAN address: PA13..PA15 (0..2 bits); 0 - master, other address - slave ### LEDS - LED0 (nearest to sensors' connectors) - heartbeat - LED1 (above LED0) - CAN bus OK ### CAN protocol Variable data length: from 1 to 7 bytes. First byte of every sequence is command mark (0xA5) or data mark (0x5A). Commands: - CMD_PING - send from master to receive answer in data packet if target alive. - CMD_START_MEASUREMENT - start single temperature measurement. - CMD_SENSORS_STATE - state of sensors. Data format: - 1 byte - Controller number - 2 byte - Command received - 3..7 bytes - data Thermal data format: - 3 byte - Sensor number (10*N + M, where N is multiplexer number, M - number of sensor in pair, i.e. 0,1,10,11,20,21...70,71) - 4 byte - thermal data H - 5 byte - thermal data L