[Ovmsdev] e: OVMS Poller module/singleton
Michael Balzer
dexter at expeedo.de
Fri Jan 24 00:28:10 HKT 2025
The CAN status variables are all explained in can.h:
// CAN status
typedef struct
{
uint32_t interrupts; // interrupts
uint32_t packets_rx; // frames reveiced
uint32_t packets_tx; // frames sent successfully
uint32_t txbuf_delay; // frames routed through TX queue
uint16_t rxbuf_overflow; // frames lost due to RX buffers full
uint16_t txbuf_overflow; // TX queue overflows
uint32_t tx_fails; // TX failures/aborts
uint32_t error_flags; // driver specific bitset
uint16_t errors_rx; // RX error counter
uint16_t errors_tx; // TX error counter
uint16_t invalid_rx; // RX invalid frame counter
uint16_t watchdog_resets; // Watchdog reset counter
uint16_t error_resets; // Error resolving reset counter
uint32_t error_time; // monotonictime of last error
state detection
} CAN_status_t;
The driver specific error flags need to be decoded in the context of the
transceiver type: can1 = esp32can driver, losely SJA1000 compatible,
can2 & can3 = mcp2515 driver.
esp32can:
error_flags = error_irqs << 16 | (status & 0b11001110) << 8 | (ecc
& 0xff);
esp32can error & status bits are documented in "esp32can_regdef.h", see
SJA1000 documentation for more details.
mcp2515:
error_flags = (intstat << 24) | (errflag << 16) | intflag;
mcp2515 interrupt & error bits are documtented in "mcp2515_regdef.h",
see MCP2515 documentation for more details, plus some synthetic internal
debugging flags as ORed in by the driver in
`mcp2515::AsynchronousInterruptHandler()` beginning on line 500.
> Interestingly both of us saw can2 errors in pairs: one with
> errflags=0x23401c01 and one with 0x22401c02. In my case these were
> either 0 or 10 ms apart.
>
* intstat 0x23 = 0b00100011 = Error state change (details in EFLG) |
RX buffer 1 full | RX buffer 0 full
o … 0x22 = same, but only RX buffer 1 full (RXB0 has just been
cleared by the driver)
* errflag 0x40 = 0x01000000 = Receive Buffer 0 Overflow
* intflag 0x1c01 = all indications detected & processed at RX buffer 0
o … 0x1c02 = same, but at RX buffer 1
So these are simply indications of RX buffer 0 overflows. These are no
"real" overflows, as RX buffer 1 was still available, so the frames were
not lost and the rxbuf_overflow counter was not incremented.
The driver could clear this condition to avoid signaling this as a CAN
error. I think we kept it that way because an RXB0 overflow already
indicates a lot of traffic on the bus. This could also result in a
warning log, but the CAN framework doesn't know how to distinguish
driver specific errors from warnings.
> Err flags: 0x01000001
* …simply means RXB0 has been received & read.
Regards,
Michael
Am 23.01.25 um 14:48 schrieb Chris Box via OvmsDev:
>
> On 2025-01-23 12:11, Developer From Jokela via OvmsDev wrote:
>
>> E (445282) can: can2: intr=240803 rxpkt=242887 txpkt=6
>> errflags=0x22401c02 rxerr=0 txerr=0 rxinval=0 rxovr=0 txovr=0
>> txdelay=0 txfail=0 wdgreset=0 errreset=0
>
> Ok, now putting Developer From Jokela's post together with Michael's I
> think I understand what this is telling us.
>
> First, E means error.
>
> The presence of this line in the log means there has been an error on
> can bus 2. The values given appear to be the current values of some
> counters.
>
> The code is in can/src/can.cpp. This has basic deduplication by
> summing most of the counters and errflags, and only logging if this
> changes. Interestingly both of us saw can2 errors in pairs: one with
> errflags=0x23401c01 and one with 0x22401c02. In my case these were
> either 0 or 10 ms apart.
>
> The flags appear to derive from mcp2515/src/mcp2515.cpp but it's not
> clear to me what they mean.
>
>> OVMS# can can2 status
>> CAN: can2
>> Mode: Active
>> Speed: 500000
>> DBC: none
>> Interrupts: 291197
>> Rx pkt: 293642
>> Rx ovrflw: 0
>> Tx pkt: 6
>> Tx delays: 0
>> Tx ovrflw: 0
>> Tx fails: 0
>> Err flags: 0x01000001
>> Rx err: 0
>> Tx err: 0
>> Rx invalid: 0
>> Wdg Resets: 0
>> Wdg Timer: 9 sec(s)
>> Err Resets: 0
> Question: If the log tells us that can2 errors have occurred, why does
> "can can2 status" report zero values for errors?
>
> Chris
>
>
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
--
Michael Balzer * Am Rahmen 5 * D-58313 Herdecke
Fon 02330 9104094 * Handy 0176 20698926
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20250123/0c18f665/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 203 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20250123/0c18f665/attachment-0001.sig>
More information about the OvmsDev
mailing list