Skip to content

Modem unresponsive while in radio RX #40

@flhofer

Description

@flhofer

Hi,

I'm opening this issue here as I found it to be a bigger problem I can not solve on my own. I was able to drill it down to one point.

Whenever the modem opens the RX window, the serial does not react anymore and I get an 0x01 (error character) passed from the vcom module. It seems to be that the RX window is triggered by a timer (in MiddleWare/Util/timerServer) and then configured and run. As these software timers are actually called from the underlying HW alarm interrupt, I imagine that the whole setup and window configuration runs inside an ISR.

vcom picks new chars entering triggered as an ISR. So, IF interrupts are disabled, vcom will not be able to parse newly incoming chars from the serial to the main SAMD and will overflow once the 8 Symbol hardware buffer is full. Consequently, it puts an 0x01 char in line signaling ERR_RX.

So far so good.

So, my question is, how come the ISR managing RX windows takes so long. Isn't the modem signaling reception through timers or interrupts. Did anyone look into this before?

Just to show you what happens, here is some output

### AT: 
### Data string: +EVENT
### Data string: +EVENT=0,0
### Data string: +EVENT=0,0+OK
### AT: +DEV ?
### Data string: +DEV
### AT: +VER ?
### Data string: +VER
### AT: +BAND = 5
### Data string: +OK
### AT: +DUTYCYCLE = 1
### Data string: +OK
### AT: +DUTYCYCLE = 0
### Data string: +OK
### AT: +ADR = 0
### Data string: +OK
### AT: +NWK = 1
### Data string: +OK
### AT: +MODE = 0
### Data string: +OK
### AT: +DEVADDR = 12345678 -- OBS
### Data string: +OK
### AT: +NWKSKEY = 01234567890ABCDEF1234567890ABCDEF -- OBS
### Data string: +OK
### AT: +APPSKEY = 01234567890ABCDEF1234567890ABCDEF -- OBS
### Data string: +OK
### AT: +JOIN
### AT:
### Data string: +EVENT
### Data string: +EVENT=1,1
### AT: +NJS ?
### Data string: +NJS
### AT: +RX2FQ = 869525000
### Data string: +OK
### AT: +RX2DR = 0
### Data string: +OK
### Newmask:  000500000000000000000000
### AT: +CHANMASK = 000500000000000000000000
### Data string: +OK
### AT: +DR = 5
### Data string: +OK
### AT: +ADR = 1
### Data string: +OK
### AT: +CFM = 0
### Data string: +OK
### AT: +PORT = 3
### Data string: +OK
### AT: +DFORMAT = 1
### Data string: +OK
### AT: +RFPOWER = 0 , 1
### Data string: +OK
Start test
### AT: +FCU ?
### Data string: +FCU
### AT: +MSIZE ?
### Data string: +MSIZE
### AT: +UTX   32
### Data string: +OK
### AT: +FCU ?
### Data string: +FCU
### AT: +MSIZE ?
### Data string: +MSIZE
### AT: +UTX   32
ERROR: during state execution  --- (TIMEOUT)
Stop test
Retry
### AT: +FCU ?
### Data string: +ERR_PARAM
### AT: +MSIZE ?
### Data string: +MSIZE
### AT: +UTX   32
### Data string: +ERR_BUSY
### AT: +FCU ?
### Data string: +FCU
### AT: +MSIZE ?
### Data string: +MSIZE
### AT: +UTX   32
### Data string: +OK
### AT: +FCU ?
### Data string: +FCU
### AT: +MSIZE ?
### Data string: +MSIZE
### AT: +UTX   32
ERROR: during state execution  --- (TIMEOUT)
Stop test
Retry
### AT: +FCU ?
### Data string: +ERR_PARAM
....

If I change to poll time (FCU-MSIZE-UTX), it either does not show up or during another command, e.g. once I had it at MSIZE.

Specs:
FW 1.2.4 (from my pull request)
Library Matching -- from my pull request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions