1
0
mirror of https://github.com/peterantypas/maiana.git synced 2025-05-16 07:20:08 -07:00

Detecting RF IC initialization error

This commit is contained in:
Peter Antypas 2023-09-26 21:02:07 -07:00
parent d97310ad0a
commit 964de69df0
7 changed files with 64 additions and 15 deletions

View File

@ -189,8 +189,8 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.8556468" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork.1656747017" name="Thumb interwork (-mthumb-interwork)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.553987836" name="Endianness" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.1689973915" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1585028559" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.1689973915" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.default" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1585028559" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.default" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.1126478922" name="Unaligned access" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family.1267265532" name="AArch64 family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family" useByScannerDiscovery="false"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc.2146715394" name="Feature crc" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc" useByScannerDiscovery="false"/>
@ -241,7 +241,7 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other.440656042" name="Other debugging flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab.1231559104" name="showDevicesTab" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab" useByScannerDiscovery="false"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.191104395" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<builder buildPath="${workspace_loc:/ais_bootloader}/Debug" id="ilg.gnuarmeclipse.managedbuild.cross.builder.2101099789" incrementalBuildTarget="all maiana-bootloader.bin maiana-bootloader.siz" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
<builder buildPath="${workspace_loc:/ais_bootloader}/Debug" id="ilg.gnuarmeclipse.managedbuild.cross.builder.2101099789" incrementalBuildTarget="all maiana-bootloader.bin maiana-bootloader.siz" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" parallelBuildOn="false" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.1930397255" name="GNU ARM Cross Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.1902215475" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.1602741297" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
@ -264,10 +264,11 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile.2102917721" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/STM32L4xx_FLASH.ld}&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other.1569588490" name="Other linker flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other" useByScannerDiscovery="false" value="--specs=rdimon.specs" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other.1569588490" name="Other linker flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.other" useByScannerDiscovery="false" value="" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano.937300021" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnosys.1552580303" name="Do not use syscalls (--specs=nosys.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnosys" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.strip.223731707" name="Omit all symbol information (-s)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.strip" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usescanffloat.812177626" name="Use float with nano scanf (-u _scanf_float)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usescanffloat" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input.2124413648" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@ -625,6 +626,7 @@
</configuration>
<configuration configurationName="L432-Debug"/>
<configuration configurationName="L432"/>
<configuration configurationName="L431"/>
<configuration configurationName="L422-Release">
<resource resourceType="PROJECT" workspacePath="/ais_bootloader"/>
</configuration>

View File

@ -48,12 +48,13 @@ public:
void setRSSIAdjustment(short rssiAdj);
uint16_t partNumber();
bool isResponsive();
protected:
virtual void configure();
bool sendCmd(uint8_t cmd, void* params, uint8_t paramLen, void* result, uint8_t resultLen);
bool sendCmdNoWait(uint8_t cmd, void* params, uint8_t paramLen);
bool isInitialized();
void powerOnReset();
bool powerOnReset();
bool isReceiving();
uint8_t readRSSI();
bool checkStatus();
@ -76,6 +77,7 @@ protected:
uint32_t mChipID;
bool mCTSPending = false;
uint16_t mPartNumber;
bool mPORSuccess = false;
};
#endif /* RFIC_HPP_ */

View File

@ -54,6 +54,7 @@ private:
RadioManager();
void spiOff();
void configureInterrupts();
void reportError(int chipId);
private:
Transceiver *mTransceiverIC;
Receiver *mReceiverIC;

View File

@ -25,7 +25,7 @@
#include "TXPowerSettings.h"
#define FW_REV "4.1.0"
#define FW_REV "4.2.0"
/*

View File

@ -49,7 +49,11 @@ RFIC::RFIC(GPIO_TypeDef *sdnPort,
mChipID = chipID;
if ( !isInitialized() )
powerOnReset();
{
mPORSuccess = powerOnReset();
}
else
mPORSuccess = true;
}
@ -67,6 +71,11 @@ inline void RFIC::spiOff()
HAL_GPIO_WritePin(mCSPort, mCSPin, GPIO_PIN_SET);
}
bool RFIC::isResponsive()
{
return mPORSuccess;
}
bool RFIC::sendCmd(uint8_t cmd, void* params, uint8_t paramLen, void* result, uint8_t resultLen)
{
if ( mCTSPending )
@ -205,7 +214,7 @@ bool RFIC::isInitialized()
}
}
void RFIC::powerOnReset()
bool RFIC::powerOnReset()
{
// Pull SDN high to shut down the IC
HAL_GPIO_WritePin(mSDNP, mSDNPin, GPIO_PIN_SET);
@ -216,8 +225,14 @@ void RFIC::powerOnReset()
// Pull SDN low and poll the status of GPIO1
HAL_GPIO_WritePin(mSDNP, mSDNPin, GPIO_PIN_RESET);
while ( HAL_GPIO_ReadPin(mDataPort, mDataPin) == GPIO_PIN_RESET )
;
uint32_t start = HAL_GetTick();
while ( HAL_GetTick() - start < 1000 )
{
if ( HAL_GPIO_ReadPin(mDataPort, mDataPin) == GPIO_PIN_SET )
return true;
}
return false;
}
/**

View File

@ -55,14 +55,30 @@ void RadioManager::init()
CS1_PORT, CS1_PIN,
TRX_IC_DATA_PORT, TRX_IC_DATA_PIN,
TRX_IC_CLK_PORT, TRX_IC_CLK_PIN, 0);
if ( mTransceiverIC->isResponsive() )
{
mTransceiverIC->init();
}
else
{
reportError(1);
}
mReceiverIC = new Receiver(SDN2_PORT, SDN2_PIN,
CS2_PORT, CS2_PIN,
RX_IC_DATA_PORT, RX_IC_DATA_PIN,
RX_IC_CLK_PORT, RX_IC_CLK_PIN, 1);
if ( mReceiverIC->isResponsive() )
{
mReceiverIC->init();
}
else
{
reportError(2);
}
if ( mReceiverIC->isResponsive() && mTransceiverIC->isResponsive() )
mInitializing = false;
}
@ -88,6 +104,16 @@ void RadioManager::stop()
// TODO: Implement this
}
void RadioManager::reportError(int chipId)
{
Event *e = EventPool::instance().newEvent(PROPR_NMEA_SENTENCE);
if ( !e )
return;
sprintf(e->nmeaBuffer.sentence, "$PAIERR,RFIC,%d*", chipId);
Utils::completeNMEA(e->nmeaBuffer.sentence);
EventQueue::instance().push(e);
}
void RadioManager::configureInterrupts()
{

View File

@ -64,10 +64,13 @@ void mainLoop()
LEDManager::instance().init();
if ( !cliBootMode )
{
if ( RadioManager::instance().initialized() )
{
GPS::instance().enable();
RadioManager::instance().start();
}
}
else
{
DataTerminal::instance().write("\r\n\r\nCLI mode. Send the 'reboot' command or cycle power to exit.\r\n");