mirror of
https://github.com/meshtastic/firmware.git
synced 2025-05-08 06:28:51 +00:00
Merge pull request #1792 from meshtastic/atecca
Support for ATECCA608B Cryptographic Coprocessor
This commit is contained in:
commit
bf503354f3
@ -1,6 +1,6 @@
|
|||||||
; Common settings for rp2040 Processor based targets
|
; Common settings for rp2040 Processor based targets
|
||||||
[rp2040_base]
|
[rp2040_base]
|
||||||
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
|
platform = https://github.com/maxgerhardt/platform-raspberrypi.git#5ce1a228e7cae453f366deb8962252b9b7356bbc
|
||||||
extends = arduino_base
|
extends = arduino_base
|
||||||
board_build.core = earlephilhower
|
board_build.core = earlephilhower
|
||||||
board_build.filesystem_size = 0.5m
|
board_build.filesystem_size = 0.5m
|
||||||
|
@ -65,6 +65,7 @@ lib_deps =
|
|||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
; Portduino is using meshtastic fork for now
|
; Portduino is using meshtastic fork for now
|
||||||
jgromes/RadioLib@5.4.1
|
jgromes/RadioLib@5.4.1
|
||||||
|
https://github.com/caveman99/SparkFun_ATECCX08a_Arduino_Library.git#008e7f9d40bad66b2f7a0074aaac05b7c424339d
|
||||||
|
|
||||||
build_flags = ${env.build_flags} -Os
|
build_flags = ${env.build_flags} -Os
|
||||||
-DRADIOLIB_SPI_PARANOID=0
|
-DRADIOLIB_SPI_PARANOID=0
|
||||||
|
@ -110,6 +110,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define INA_ADDR_ALTERNATE 0x41
|
#define INA_ADDR_ALTERNATE 0x41
|
||||||
#define QMC6310_ADDR 0x1C
|
#define QMC6310_ADDR 0x1C
|
||||||
#define QMI8658_ADDR 0x6B
|
#define QMI8658_ADDR 0x6B
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Security
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define ATECC608B_ADDR 0x35
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// GPS
|
// GPS
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
@ -9,6 +9,41 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_WIRE
|
#if HAS_WIRE
|
||||||
|
|
||||||
|
void printATECCInfo()
|
||||||
|
{
|
||||||
|
#ifndef ARCH_PORTDUINO
|
||||||
|
atecc.readConfigZone(false);
|
||||||
|
|
||||||
|
DEBUG_MSG("ATECC608B Serial Number: ");
|
||||||
|
for (int i = 0 ; i < 9 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.serialNumber[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_MSG(", Rev Number: ");
|
||||||
|
for (int i = 0 ; i < 4 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.revisionNumber[i]);
|
||||||
|
}
|
||||||
|
DEBUG_MSG("\n");
|
||||||
|
|
||||||
|
DEBUG_MSG("ATECC608B Config %s",atecc.configLockStatus ? "Locked" : "Unlocked");
|
||||||
|
DEBUG_MSG(", Data %s",atecc.dataOTPLockStatus ? "Locked" : "Unlocked");
|
||||||
|
DEBUG_MSG(", Slot 0 %s\n",atecc.slot0LockStatus ? "Locked" : "Unlocked");
|
||||||
|
|
||||||
|
if (atecc.configLockStatus && atecc.dataOTPLockStatus && atecc.slot0LockStatus) {
|
||||||
|
if (atecc.generatePublicKey() == false) {
|
||||||
|
DEBUG_MSG("ATECC608B Error generating public key\n");
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("ATECC608B Public Key: ");
|
||||||
|
for (int i = 0 ; i < 64 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.publicKey64Bytes[i]);
|
||||||
|
}
|
||||||
|
DEBUG_MSG("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length) {
|
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length) {
|
||||||
uint16_t value = 0x00;
|
uint16_t value = 0x00;
|
||||||
Wire.beginTransmission(address);
|
Wire.beginTransmission(address);
|
||||||
@ -79,6 +114,17 @@ void scanI2Cdevice(void)
|
|||||||
DEBUG_MSG("unknown display found\n");
|
DEBUG_MSG("unknown display found\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef ARCH_PORTDUINO
|
||||||
|
if (addr == ATECC608B_ADDR){
|
||||||
|
keystore_found = addr;
|
||||||
|
if (atecc.begin(keystore_found) == true) {
|
||||||
|
DEBUG_MSG("ATECC608B initialized\n");
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("ATECC608B initialization failed\n");
|
||||||
|
}
|
||||||
|
printATECCInfo();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef RV3028_RTC
|
#ifdef RV3028_RTC
|
||||||
if (addr == RV3028_RTC){
|
if (addr == RV3028_RTC){
|
||||||
rtc_found = addr;
|
rtc_found = addr;
|
||||||
|
@ -80,6 +80,12 @@ uint8_t kb_model;
|
|||||||
// The I2C address of the RTC Module (if found)
|
// The I2C address of the RTC Module (if found)
|
||||||
uint8_t rtc_found;
|
uint8_t rtc_found;
|
||||||
|
|
||||||
|
// Keystore Chips
|
||||||
|
uint8_t keystore_found;
|
||||||
|
#ifndef ARCH_PORTDUINO
|
||||||
|
ATECCX08A atecc;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool eink_found = true;
|
bool eink_found = true;
|
||||||
|
|
||||||
uint32_t serialSinceMsec;
|
uint32_t serialSinceMsec;
|
||||||
|
@ -6,18 +6,26 @@
|
|||||||
#include "PowerStatus.h"
|
#include "PowerStatus.h"
|
||||||
#include "graphics/Screen.h"
|
#include "graphics/Screen.h"
|
||||||
#include "mesh/generated/telemetry.pb.h"
|
#include "mesh/generated/telemetry.pb.h"
|
||||||
|
#ifndef ARCH_PORTDUINO
|
||||||
|
#include <SparkFun_ATECCX08a_Arduino_Library.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
extern uint8_t screen_found;
|
extern uint8_t screen_found;
|
||||||
extern uint8_t screen_model;
|
extern uint8_t screen_model;
|
||||||
extern uint8_t cardkb_found;
|
extern uint8_t cardkb_found;
|
||||||
extern uint8_t kb_model;
|
extern uint8_t kb_model;
|
||||||
extern uint8_t rtc_found;
|
extern uint8_t rtc_found;
|
||||||
|
extern uint8_t keystore_found;
|
||||||
|
|
||||||
extern bool eink_found;
|
extern bool eink_found;
|
||||||
extern bool pmu_found;
|
extern bool pmu_found;
|
||||||
extern bool isCharging;
|
extern bool isCharging;
|
||||||
extern bool isUSBPowered;
|
extern bool isUSBPowered;
|
||||||
|
|
||||||
|
#ifndef ARCH_PORTDUINO
|
||||||
|
extern ATECCX08A atecc;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern uint8_t nodeTelemetrySensorsMap[TelemetrySensorType_QMI8658+1];
|
extern uint8_t nodeTelemetrySensorsMap[TelemetrySensorType_QMI8658+1];
|
||||||
|
|
||||||
extern int TCPPort; // set by Portduino
|
extern int TCPPort; // set by Portduino
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
[env:pico]
|
[env:pico]
|
||||||
extends = rp2040_base
|
extends = rp2040_base
|
||||||
board = pico
|
board = rpipico
|
||||||
upload_protocol = picotool
|
upload_protocol = picotool
|
||||||
|
|
||||||
# add our variants files to the include and src paths
|
# add our variants files to the include and src paths
|
||||||
build_flags = ${rp2040_base.build_flags}
|
build_flags = ${rp2040_base.build_flags}
|
||||||
-DPRIVATE_HW
|
-DPRIVATE_HW
|
||||||
-Ivariants/pico
|
-Ivariants/rpipico
|
||||||
-DARDUINO_AVR_NANO_EVERY
|
-DARDUINO_AVR_NANO_EVERY
|
||||||
-DDEBUG_RP2040_WIRE
|
-DDEBUG_RP2040_WIRE
|
||||||
-DDEBUG_RP2040_SPI
|
-DDEBUG_RP2040_SPI
|
17
variants/rpipicow/platformio.ini
Normal file
17
variants/rpipicow/platformio.ini
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[env:picow]
|
||||||
|
extends = rp2040_base
|
||||||
|
board = rpipicow
|
||||||
|
upload_protocol = picotool
|
||||||
|
|
||||||
|
# add our variants files to the include and src paths
|
||||||
|
build_flags = ${rp2040_base.build_flags}
|
||||||
|
-DPRIVATE_HW
|
||||||
|
-Ivariants/rpipicow
|
||||||
|
-DARDUINO_AVR_NANO_EVERY
|
||||||
|
-DDEBUG_RP2040_WIRE
|
||||||
|
-DDEBUG_RP2040_SPI
|
||||||
|
-DDEBUG_RP2040_CORE
|
||||||
|
-DDEBUG_RP2040_PORT=Serial
|
||||||
|
-DUSE_TINYUSB
|
||||||
|
lib_deps =
|
||||||
|
${rp2040_base.lib_deps}
|
52
variants/rpipicow/variant.h
Normal file
52
variants/rpipicow/variant.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// #define RADIOLIB_CUSTOM_ARDUINO 1
|
||||||
|
// #define RADIOLIB_TONE_UNSUPPORTED 1
|
||||||
|
// #define RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED 1
|
||||||
|
|
||||||
|
#define ARDUINO_ARCH_AVR
|
||||||
|
|
||||||
|
#define CBC 0
|
||||||
|
#define CTR 1
|
||||||
|
#define ECB 0
|
||||||
|
|
||||||
|
#define NO_GPS 1
|
||||||
|
#define USE_SH1106 1
|
||||||
|
#undef GPS_SERIAL_NUM
|
||||||
|
|
||||||
|
// #define I2C_SDA 6
|
||||||
|
// #define I2C_SCL 7
|
||||||
|
|
||||||
|
#define BUTTON_PIN 17
|
||||||
|
#define EXT_NOTIFY_OUT 4
|
||||||
|
|
||||||
|
#define BATTERY_PIN 26
|
||||||
|
// ratio of voltage divider = 3.0 (R17=200k, R18=100k)
|
||||||
|
#define ADC_MULTIPLIER 3.1 // 3.0 + a bit for being optimistic
|
||||||
|
|
||||||
|
#define USE_RF95
|
||||||
|
#define USE_SX1262
|
||||||
|
|
||||||
|
#undef RF95_SCK
|
||||||
|
#undef RF95_MISO
|
||||||
|
#undef RF95_MOSI
|
||||||
|
#undef RF95_NSS
|
||||||
|
|
||||||
|
#define RF95_SCK 10
|
||||||
|
#define RF95_MISO 12
|
||||||
|
#define RF95_MOSI 11
|
||||||
|
#define RF95_NSS 3
|
||||||
|
|
||||||
|
#define LORA_DIO0 RADIOLIB_NC
|
||||||
|
#define LORA_RESET 15
|
||||||
|
#define LORA_DIO1 20
|
||||||
|
#define LORA_DIO2 2
|
||||||
|
#define LORA_DIO3 RADIOLIB_NC
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
#define SX126X_CS RF95_NSS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_E22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Adafruit_TinyUSB.h>
|
Loading…
Reference in New Issue
Block a user