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
_______________________________________________
devel mailing list
[email protected]
https://lists.riot-os.org/mailman/listinfo/devel