[Tinyos-help] CRC in CC2420
Razvan Musaloiu-E.
razvanm at cs.jhu.edu
Tue Feb 17 12:18:37 PST 2009
Hi!
On Tue, 17 Feb 2009, Jordi Pérez wrote:
> Hi!
>
> I have just tried it, and it works correctly. I see the bad and the correct
> packets.
>
There was a bug in my patch (Mike point it out to me). I attached the
correct one now. :-)
--
Razvan ME
> 2009/2/17 Razvan Musaloiu-E. <razvanm at cs.jhu.edu>
>
>> Hi!
>>
>> On Mon, 16 Feb 2009, Jordi Pérez wrote:
>>
>> Hi Razvan!
>>>
>>> I tryed to understand the code to disable the filtering you said, but I
>>> can't. Do you mind explaining me the things I have to change?
>>>
>>> In RXFIFO.readDone event when I modify something, the program doesn't
>>> work.
>>> So I don't know how disable it.
>>>
>>> In the SubReceive.receive event I changed the word Snoop to Receive, but I
>>> don't really know if it is correct.
>>>
>>> Can you help me please?
>>>
>>
>> I attached a patch that takes out the parts that discards the packets with
>> bad CRC. It's against the latest CVS and you can apply it with this requence
>> of commands:
>> cd $TOSROOT
>> patch -p1 < cc2420-ignore-crc-patch.diff
>>
>> Warning: I didn't have time to test this! I only made sure that it compiles
>> fine. :-) Give it a try and if it doesn't work at it should I'll look more
>> into it.
>>
>> --
>> Razvan ME
>>
>>
>> 2009/2/12 Razvan Musaloiu-E. <razvanm at cs.jhu.edu>
>>>
>>> Hi!
>>>>
>>>>
>>>> On Wed, 11 Feb 2009, Jordi Pérez wrote:
>>>>
>>>> Dear all,
>>>>
>>>>>
>>>>> For CC2420, if AUTOCRC is set, will the hardware reject CRC-error packet automatically?
>>>>> If true, then is it possible to receive those packets but with AUTOCRC still
>>>>> being set? I want to receive this packets and rebuild them.
>>>>>
>>>>>
>>>>> The CC2420 is not discarding the packets with bad CRC. What does is to
>>>> indicate using a bit that the packet was bad (page 38, section 16.4 from
>>>> [1]). The TinyOS driver for CC2420 inspects this bit and discards the
>>>> packets if that bit is not 1. You can see this happening in the
>>>> RXFIFO.readDone event from CC2420ReceiveP.nc. The switch branch of interest
>>>> is 'case S_RX_PAYLOAD:'.
>>>>
>>>> The other filtering that you'll have to disable is in the
>>>> SubReceive.receive event from CC2420ActiveMessageP.nc.
>>>>
>>>> [1] http://focus.ti.com/lit/ds/symlink/cc2420.pdf
>>>>
>>>> --
>>>> Razvan ME
>>>>
>>>
>
-------------- next part --------------
diff --git a/tos/chips/cc2420/CC2420ActiveMessageP.nc b/tos/chips/cc2420/CC2420ActiveMessageP.nc
index 0db2423..e6a035f 100644
--- a/tos/chips/cc2420/CC2420ActiveMessageP.nc
+++ b/tos/chips/cc2420/CC2420ActiveMessageP.nc
@@ -175,10 +175,6 @@ implementation {
/***************** SubReceive Events ****************/
event message_t* SubReceive.receive(message_t* msg, void* payload, uint8_t len) {
- if(!(call CC2420PacketBody.getMetadata(msg))->crc) {
- return msg;
- }
-
if (call AMPacket.isForMe(msg)) {
return signal Receive.receive[call AMPacket.type(msg)](msg, payload, len);
}
diff --git a/tos/chips/cc2420/receive/CC2420ReceiveP.nc b/tos/chips/cc2420/receive/CC2420ReceiveP.nc
index 5bd4e85..3f32ce6 100644
--- a/tos/chips/cc2420/receive/CC2420ReceiveP.nc
+++ b/tos/chips/cc2420/receive/CC2420ReceiveP.nc
@@ -306,7 +306,7 @@ implementation {
// We may have received an ack that should be processed by Transmit
// buf[rxFrameLength] >> 7 checks the CRC
- if ( ( buf[ rxFrameLength ] >> 7 ) && rx_buf ) {
+ if ( rx_buf ) {
uint8_t type = ( header->fcf >> IEEE154_FCF_FRAME_TYPE ) & 7;
signal CC2420Receive.receive( type, m_p_rx_buf );
if ( type == IEEE154_TYPE_DATA ) {
More information about the Tinyos-help
mailing list