Added support for storing settings in FLASH.
This commit is contained in:
18
CHANGELOG.md
Normal file
18
CHANGELOG.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
Added : for new features.
|
||||||
|
Changed : for changes in existing functionality.
|
||||||
|
Deprecated: for soon-to-be removed features.
|
||||||
|
Removed : for now removed features.
|
||||||
|
Fixed : for any bug fixes.
|
||||||
|
Security : in case of vulnerabilities.
|
||||||
|
|
||||||
|
## [1.0.0] - pre 2022-05-12
|
||||||
|
First (more or less) working version.
|
||||||
|
|
||||||
|
## [1.0.1] - 2022-05-12
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Support for saving settings to internal FLASH
|
@@ -148,6 +148,16 @@ pico.h
|
|||||||
hardware/regs/addressmap.h
|
hardware/regs/addressmap.h
|
||||||
../pico-sdk/src/rp2_common/hardware_base/include/hardware/hardware/regs/addressmap.h
|
../pico-sdk/src/rp2_common/hardware_base/include/hardware/hardware/regs/addressmap.h
|
||||||
|
|
||||||
|
../pico-sdk/src/rp2_common/hardware_claim/include/hardware/claim.h
|
||||||
|
pico.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_claim/include/hardware/pico.h
|
||||||
|
hardware/sync.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_claim/include/hardware/hardware/sync.h
|
||||||
|
|
||||||
|
../pico-sdk/src/rp2_common/hardware_flash/include/hardware/flash.h
|
||||||
|
pico.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_flash/include/hardware/pico.h
|
||||||
|
|
||||||
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
||||||
pico.h
|
pico.h
|
||||||
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/pico.h
|
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/pico.h
|
||||||
@@ -166,6 +176,14 @@ hardware/structs/spi.h
|
|||||||
hardware/regs/dreq.h
|
hardware/regs/dreq.h
|
||||||
../pico-sdk/src/rp2_common/hardware_spi/include/hardware/hardware/regs/dreq.h
|
../pico-sdk/src/rp2_common/hardware_spi/include/hardware/hardware/regs/dreq.h
|
||||||
|
|
||||||
|
../pico-sdk/src/rp2_common/hardware_sync/include/hardware/sync.h
|
||||||
|
pico.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_sync/include/hardware/pico.h
|
||||||
|
hardware/address_mapped.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_sync/include/hardware/hardware/address_mapped.h
|
||||||
|
hardware/regs/sio.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_sync/include/hardware/hardware/regs/sio.h
|
||||||
|
|
||||||
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
||||||
pico.h
|
pico.h
|
||||||
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/pico.h
|
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/pico.h
|
||||||
@@ -237,12 +255,16 @@ pico/stdlib.h
|
|||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/pico/stdlib.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/pico/stdlib.h
|
||||||
pico/binary_info.h
|
pico/binary_info.h
|
||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/pico/binary_info.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/pico/binary_info.h
|
||||||
|
hardware/flash.h
|
||||||
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/hardware/flash.h
|
||||||
LoRa-RP2040.h
|
LoRa-RP2040.h
|
||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/LoRa-RP2040.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/LoRa-RP2040.h
|
||||||
Config.h
|
Config.h
|
||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/Config.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/Config.h
|
||||||
KISS.h
|
KISS.h
|
||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/KISS.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/KISS.h
|
||||||
|
hardware/claim.h
|
||||||
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/src/hardware/claim.h
|
||||||
|
|
||||||
generated/pico_base/pico/config_autogen.h
|
generated/pico_base/pico/config_autogen.h
|
||||||
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/pico-sdk/src/boards/include/boards/pico.h
|
/home/marcel/Documents/electronische_projecten/lora_aprs_node_pico/pico-sdk/src/boards/include/boards/pico.h
|
||||||
|
@@ -2162,8 +2162,11 @@ src/CMakeFiles/main.dir/main.cpp.obj
|
|||||||
../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h
|
../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h
|
||||||
../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/uart.h
|
../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/uart.h
|
||||||
../pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h
|
../pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_claim/include/hardware/claim.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_flash/include/hardware/flash.h
|
||||||
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
||||||
../pico-sdk/src/rp2_common/hardware_spi/include/hardware/spi.h
|
../pico-sdk/src/rp2_common/hardware_spi/include/hardware/spi.h
|
||||||
|
../pico-sdk/src/rp2_common/hardware_sync/include/hardware/sync.h
|
||||||
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
||||||
../pico-sdk/src/rp2_common/hardware_uart/include/hardware/uart.h
|
../pico-sdk/src/rp2_common/hardware_uart/include/hardware/uart.h
|
||||||
../pico-sdk/src/rp2_common/pico_platform/include/pico/platform.h
|
../pico-sdk/src/rp2_common/pico_platform/include/pico/platform.h
|
||||||
|
@@ -2161,8 +2161,11 @@ src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2040/hardware_structs/in
|
|||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/uart.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/uart.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h
|
||||||
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_claim/include/hardware/claim.h
|
||||||
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_flash/include/hardware/flash.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_gpio/include/hardware/gpio.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_spi/include/hardware/spi.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_spi/include/hardware/spi.h
|
||||||
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_sync/include/hardware/sync.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_uart/include/hardware/uart.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/hardware_uart/include/hardware/uart.h
|
||||||
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/pico_platform/include/pico/platform.h
|
src/CMakeFiles/main.dir/main.cpp.obj: ../pico-sdk/src/rp2_common/pico_platform/include/pico/platform.h
|
||||||
|
Binary file not shown.
Binary file not shown.
51799
build/src/main.dis
51799
build/src/main.dis
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
7562
build/src/main.hex
7562
build/src/main.hex
File diff suppressed because it is too large
Load Diff
Binary file not shown.
16
src/Config.h
16
src/Config.h
@@ -60,14 +60,18 @@
|
|||||||
const uint8_t SIG_SYNCED = 0x02;
|
const uint8_t SIG_SYNCED = 0x02;
|
||||||
const uint8_t RX_ONGOING = 0x04;
|
const uint8_t RX_ONGOING = 0x04;
|
||||||
|
|
||||||
|
// The size of this struc should be a exactly 256 bytes, which is the FLASH_PAGE_SIZE of the RPi pico's flash memory
|
||||||
struct aprssettings {
|
struct aprssettings {
|
||||||
uint8_t MyCall[10] = { 'P','E','1','R','X','F','-','5', 0} ;
|
uint8_t ValidFlashData = 0x5A; // Indicates flash contains valid data - 1 bytes
|
||||||
uint8_t ServerCall[10] = { 'P','E','1','R','X','F','-','3', 0} ;
|
uint8_t MyCall[10] = { 'N','O','C','A','L','L','-','2', 0} ; // 10 bytes
|
||||||
uint8_t Destination[10] = { 'A','P','Z','M','D','M', 0} ;
|
uint8_t ServerCall[10] = { 'N','O','C','A','L','L','-','1', 0} ; // 10 bytes
|
||||||
uint8_t Path1[10] = { 0,'I','D','E','1','-', '1', 0} ;
|
uint8_t Destination[10] = { 'A','P','Z','M','D','M', 0} ; // 10 bytes
|
||||||
uint8_t Path2[10] = { 0,'I','D','E','2','-', '2', 0} ;
|
uint8_t Path1[10] = { 0,'I','D','E','1','-', '1', 0} ; // 10 bytes
|
||||||
|
uint8_t Path2[10] = { 0,'I','D','E','2','-', '2', 0} ; // 10 bytes
|
||||||
|
|
||||||
uint8_t FirmwareVersion[20] = { 'V','1',',','C','o','n','t','r', 'o','l','l','e','r',' ','0','1', 0} ;
|
uint8_t FirmwareVersion[20] = { 'V','1',',','C','o','n','t','r', 'o','l','l','e','r',' ','0','1', 0} ; // 20 bytes
|
||||||
|
// 71 bytes total
|
||||||
|
uint8_t FillerData[256-71];
|
||||||
} AprsSettings;
|
} AprsSettings;
|
||||||
|
|
||||||
struct status {
|
struct status {
|
||||||
|
66
src/main.cpp
66
src/main.cpp
@@ -3,12 +3,13 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "pico/stdlib.h"
|
#include "pico/stdlib.h"
|
||||||
#include "pico/binary_info.h"
|
#include "pico/binary_info.h"
|
||||||
|
#include "hardware/flash.h"
|
||||||
#include "LoRa-RP2040.h"
|
#include "LoRa-RP2040.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "KISS.h"
|
#include "KISS.h"
|
||||||
|
#include "hardware/claim.h"
|
||||||
|
|
||||||
bool startRadio();
|
bool startRadio();
|
||||||
bool LoadSettings();
|
|
||||||
void getPacketData(int packetLength);
|
void getPacketData(int packetLength);
|
||||||
int compare_strings(uint8_t a[], uint8_t b[]);
|
int compare_strings(uint8_t a[], uint8_t b[]);
|
||||||
bool is_message_for_me (uint8_t data[], uint8_t mycall[]);
|
bool is_message_for_me (uint8_t data[], uint8_t mycall[]);
|
||||||
@@ -27,12 +28,47 @@ const uint PowerSupply5VControl = 4;
|
|||||||
const uint RelayOffControl = 2;
|
const uint RelayOffControl = 2;
|
||||||
const uint RelayOnControl = 3;
|
const uint RelayOnControl = 3;
|
||||||
|
|
||||||
int main() {
|
// We're going to use a region 256k from the start of flash as non volatile storage for our settings.
|
||||||
|
// We can access this at XIP_BASE + 256k.
|
||||||
|
#define FLASH_TARGET_OFFSET (512 * 1024)
|
||||||
|
|
||||||
uint16_t ServerCommand = 0;
|
const uint8_t *flash_target_contents = (const uint8_t *) (XIP_BASE + FLASH_TARGET_OFFSET);
|
||||||
uint16_t TxDelay = 0;
|
|
||||||
|
|
||||||
/* Among others, this initializes the USB-serial port at 115200bps 8N1 */
|
uint8_t ReadSettingsFromFlash(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
// If byte zero of flash contains 0x5A we assume the data to be valid, otherwise we fill the flash with default values.
|
||||||
|
if (flash_target_contents[0] != 0x5A)
|
||||||
|
{
|
||||||
|
printf( "No valid data found in FLASH memory.\n" );
|
||||||
|
memset(AprsSettings.FillerData, 0, sizeof(AprsSettings.FillerData));
|
||||||
|
uint32_t ints = save_and_disable_interrupts();
|
||||||
|
|
||||||
|
// First we erase the FLASH sector we need. After that we can store new values.
|
||||||
|
// Note that a whole number of sectors must be erased at a time.
|
||||||
|
// Sector size is 4kB, so this is way bigger than the needed 256 bytes for storing the settings.
|
||||||
|
printf("Erasing FLASH region...");
|
||||||
|
flash_range_erase(FLASH_TARGET_OFFSET, FLASH_SECTOR_SIZE);
|
||||||
|
printf("done\n");
|
||||||
|
printf("Writing default values to FLASH...");
|
||||||
|
flash_range_program(FLASH_TARGET_OFFSET, (uint8_t*)&AprsSettings, FLASH_PAGE_SIZE);
|
||||||
|
printf("done\n");
|
||||||
|
restore_interrupts (ints);
|
||||||
|
} else {
|
||||||
|
// Read settings stored in flash memory
|
||||||
|
printf("Found valid settings in FLASH memory.\n");
|
||||||
|
}
|
||||||
|
memcpy((uint8_t*)&AprsSettings, flash_target_contents, FLASH_PAGE_SIZE);
|
||||||
|
|
||||||
|
printf("APRS settings:\n");
|
||||||
|
printf("My call: %s\n", AprsSettings.MyCall);
|
||||||
|
printf("Server call: %s\n", AprsSettings.ServerCall);
|
||||||
|
printf("Firmware: %s\n",AprsSettings.FirmwareVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup(void)
|
||||||
|
{
|
||||||
|
/* Among others, this initializes the USB-serial port at 115200bps 8N1 */
|
||||||
stdio_init_all();
|
stdio_init_all();
|
||||||
|
|
||||||
// Buffers
|
// Buffers
|
||||||
@@ -66,9 +102,17 @@ int main() {
|
|||||||
|
|
||||||
sleep_ms(5000);
|
sleep_ms(5000);
|
||||||
|
|
||||||
LoadSettings();
|
ReadSettingsFromFlash();
|
||||||
|
|
||||||
startRadio();
|
startRadio();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
uint16_t ServerCommand = 0;
|
||||||
|
uint16_t TxDelay = 0;
|
||||||
|
|
||||||
|
setup();
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int packetSize = LoRa.parsePacket();
|
int packetSize = LoRa.parsePacket();
|
||||||
@@ -196,16 +240,6 @@ int main() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Load settings from EEPROM
|
|
||||||
*/
|
|
||||||
bool LoadSettings()
|
|
||||||
{
|
|
||||||
printf("APRS settings:\n");
|
|
||||||
printf("My call: %s\n", AprsSettings.MyCall);
|
|
||||||
printf("Server call: %s\n", AprsSettings.ServerCall);
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Initializes the LoRa module with the parameters set in config.h
|
* Initializes the LoRa module with the parameters set in config.h
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user