Hi Baptiste,

On 17 May 2017, at 1:14 PDT(-0700), Baptiste Clenet wrote:

According to their example:
Example:
A frame transmission of length five with TX_AUTO_CRC_ON set, is
started with a Frame Buffer write access of five bytes (the last two
bytes can be omitted). The first three bytes are used for FCS
generation; the last two bytes are replaced by the internally
calculated FCS.

Even a five bytes frame would have its last two bytes overwritten. Is
my understanding correct?
So I don't understand why the driver limits the frame length to 127-2?

The at86rf2xx driver doesn't limit the *frame length* to 127-2 octets because the FCS is part of the frame sent out. The driver just makes sure that no payload
data is overwritten by the FCS.

Every 802.15.4 frame has two bytes of FCS. So if we didn't use TX_AUTO_CRC_ON we would have to calculate the checksum in software and write it into the frame buffer, appended to the header, sequence number, addresses and payload we want to send. All together (FCF + seq_num + addrs + payload + FCS) this can
be 127 bytes max.

Now RIOT's at86rf2xx driver uses TX_AUTO_CRC_ON thus we don't have to calculate
the FCS, it's appended to the rest of the frame.

Personally, I never tried what happens if you remove this check for 127-2 and fully fill the frame buffer but I would imagine that exactly that happens, the last two bytes are overwritten by the FCS and thus lost, unless it already was
the exact same checksum.

Best, Thomas



2017-05-16 16:42 GMT+02:00 Thomas Eichinger <[email protected]>:
Hi Baptiste,

If you take a look at figures 37-1 and 37-2 in the data sheet you linked you can see that IEEE 802.15.4 allows up to 127 bytes for the MPDU and this includes the FCS. So if the driver would allow writing 127 bytes into the frame buffer the last two bytes would indeed be overwritten which is undesired I guess.

I hope I understood you correctly and this helps.

Best, Thomas

On May 16, 2017, at 6:09 AM, Baptiste Clenet <[email protected]> wrote:

Thomas, Hauke, Martine, Kaspar what do you think about it?

My last question: how do I send a packet with length 127 octets with
at86rf2xx transceiver?

2017-05-15 14:59 GMT+02:00 Baptiste Clenet <[email protected]>:
Hi,

When I want to send a pkt which is 126 Octet long, I get a message
from [at86rf2xx]:
[at86rf2xx] error: packet too large (2 byte) to be send

IEE802.15.4 MAX length is 127 so it should be sent.
#define IEEE802154_FRAME_LEN_MAX (127U) /**< maximum frame length */

I checked source code of at86rf2xx driver and I think I understand the
magic number +2 in the if condition but I don't know why this is
checked.

at86rf2xx_netdev.c:110:

       /* current packet data + FCS too long */
       if ((len + ptr->iov_len + 2) > AT86RF2XX_MAX_PKT_LENGTH) {
DEBUG("[at86rf2xx] error: packet too large (%u byte) to be
send (iov_len %d, i %d, count %d)\n",
                 (unsigned)len + 2, ptr->iov_len, i, count);
           return -EOVERFLOW;
       }

+2 mean two FCS octets?
In the samr21 datasheet, 37.3 Frame Check Sequence (FCS) [1]:

For a frame with a frame length specified as N (3 ≤ N ≤ 127), the FCS
is calculated on the first N-2 octets in the Frame Buffer, and the
resulting FCS field is transmitted in place of the last two octets
from the Frame Buffer.
Example:
A frame transmission of length five with TX_AUTO_CRC_ON set, is
started with a Frame Buffer write access of five bytes (the last two
bytes can be omitted). The first three bytes are used for FCS
generation; the last two bytes are replaced by the internally
calculated FCS.

So while I think we should remove the +2 test and let the possibility
to send packet up to 127 octets and I don't understand the part in
datasheet: "the last two bytes are replaced by the internally
calculated FCS". This mean that a part of data is erased? (for 5
octets or 127)

Cheers,

[1] http://www.atmel.com/Images/Atmel-42223%E2%80%93SAM-R21_Datasheet.pdf


--
Baptiste



--
Baptiste
_______________________________________________
devel mailing list
[email protected]
https://lists.riot-os.org/mailman/listinfo/devel

_______________________________________________
devel mailing list
[email protected]
https://lists.riot-os.org/mailman/listinfo/devel



--
Baptiste
_______________________________________________
devel mailing list
[email protected]
https://lists.riot-os.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
[email protected]
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to