Skip to content

Frames getting retransmitted multiple times with one transmit call #4

@mjwells2002

Description

@mjwells2002

This issue presents as what appears to be a frame retransmit as can be seen here with the beacon example

Image

the retranmitted frame typically is after a CTS frame with either a random DA or all 00

looking in deeper at why this happens it seems the hardware is transmitting multiple slots when it has been asked to transmit just one of the slots, and due to the leftover pointer to the last frame in the previously used tx slot, and that the beacon example reuses the same buffer for every transmisison, we see a repeat of the current beacon frame

you can see that when the incorrect transmit of cts + dual frames happens the txq_complete_status register indicates that the hardware transmitted two slots, this is always the current slot n and n-1

Image

in this example to catch it i had the wmac panic whenever the interupt was raised for multiple slots at once

here i modified the interrupt handler to dump the PLCP0 register of each slot when the interupt is raised to indicate that multiple slots were transmitted (other registers were checked, but no changes were found)

Image

and you can see that the slots transmitted have had there PLCP0 register modified, i suspect by the hardware

i was able to confirm that the software does not seem to be modifying the PLCP0 register for slots that its not using

because the hardware is acting different with the exact same configuration each time i think this could potentially be a hardware issue

i also think this is the root cause of the issue partially fixed in #3 where a tx signal was being signalled when the slot was not in use, as this will cause not in use slots to be signaled as tx complete

i was able to work around the symptoms of this issue for my own use by reseting plcp0 to 0, and disabling other tx slots on my own fork here main...mjwells2002:esp32-wifi-hal-rs:main

however this is not a full fix for the issue, as the interupt still gets raised signalling that it did transmit the other slot which would cause issues if all tx slots were enabled, but the radio does not attempt to transmit the frame as the data pointer is invalid

if this is a hardware issue it raises the obvious question of how is the offical driver working around this issue, as this does not happen on the offical driver

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions