-
-
Notifications
You must be signed in to change notification settings - Fork 23
Description
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.