Slow down main bus I2C baud rate to 30kHz when BusPal is on to make firmware transfer more robust.

This commit is contained in:
László Monda
2018-01-14 20:27:17 +01:00
parent 2661c3d909
commit b76b3c0e4f
4 changed files with 20 additions and 9 deletions

View File

@@ -10,11 +10,12 @@
// Main bus
#define I2C_MAIN_BUS_BASEADDR I2C0
#define I2C_MAIN_BUS_IRQ_ID I2C0_IRQn
#define I2C_MAIN_BUS_CLK_SRC I2C0_CLK_SRC
#define I2C_MAIN_BUS_BAUD_RATE 100000
#define I2C_MAIN_BUS_MUX kPORT_MuxAlt7
#define I2C_MAIN_BUS_BASEADDR I2C0
#define I2C_MAIN_BUS_IRQ_ID I2C0_IRQn
#define I2C_MAIN_BUS_CLK_SRC I2C0_CLK_SRC
#define I2C_MAIN_BUS_NORMAL_BAUD_RATE 100000
#define I2C_MAIN_BUS_BUSPAL_BAUD_RATE 30000
#define I2C_MAIN_BUS_MUX kPORT_MuxAlt7
#define I2C_MAIN_BUS_SDA_GPIO GPIOD
#define I2C_MAIN_BUS_SDA_PORT PORTD

View File

@@ -15,10 +15,20 @@
#include "key_debouncer.h"
#include "usb_api.h"
#include "slave_scheduler.h"
#include "bootloader/wormhole.h"
uint32_t I2cMainBusRequestedBaudRateBps = I2C_MAIN_BUS_BAUD_RATE;
bool IsBusPalOn;
uint32_t I2cMainBusRequestedBaudRateBps = I2C_MAIN_BUS_NORMAL_BAUD_RATE;
uint32_t I2cMainBusActualBaudRateBps;
void initBusPalState(void) {
IsBusPalOn = Wormhole.magicNumber == WORMHOLE_MAGIC_NUMBER && Wormhole.enumerationMode == EnumerationMode_BusPal;
if (IsBusPalOn) {
Wormhole.magicNumber = 0;
I2cMainBusRequestedBaudRateBps = I2C_MAIN_BUS_BUSPAL_BAUD_RATE;
}
}
void InitInterruptPriorities(void)
{
NVIC_SetPriority(PIT_I2C_WATCHDOG_IRQ_ID, 1);
@@ -124,6 +134,7 @@ void InitI2c(void)
void InitPeripherals(void)
{
initBusPalState();
InitInterruptPriorities();
Timer_Init();
InitLedDriver();

View File

@@ -7,6 +7,7 @@
// Variables:
extern bool IsBusPalOn;
extern uint32_t I2cMainBusRequestedBaudRateBps;
extern uint32_t I2cMainBusActualBaudRateBps;

View File

@@ -5,7 +5,6 @@
#include "slave_scheduler.h"
#include "bus_pal_hardware.h"
#include "command.h"
#include "bootloader/wormhole.h"
#include "eeprom.h"
#include "key_scanner.h"
#include "usb_commands/usb_command_apply_config.h"
@@ -34,8 +33,7 @@ void main(void)
EEPROM_LaunchTransfer(EepromOperation_Read, ConfigBufferId_HardwareConfig, hardwareConfigurationReadFinished);
}
if (Wormhole.magicNumber == WORMHOLE_MAGIC_NUMBER && Wormhole.enumerationMode == EnumerationMode_BusPal) {
Wormhole.magicNumber = 0;
if (IsBusPalOn) {
init_hardware();
handleUsbBusPalCommand();
} else {