[Oberon] FPGA - nRF24L01 `RPI Net' server
Jörg Straube
joerg.straube at iaeth.ch
Thu May 17 18:15:43 CEST 2018
What does reUseTX() do?
Jörg
> Am 17.05.2018 um 11:20 schrieb Tomas Kral <thomas.kral at email.cz>:
>
> On Wed, 16 May 2018 20:11:44 +0200
> Tomas Kral <thomas.kral at email.cz> wrote:
>
>> I wonder If I somehow reused payload instead, while resetting MAX
>> count, were it still seen as a new transaction by the receiver? Would
>> I get duplicates?
>
> First of all thank you for bearing reading this. If I write too much,
> please just give me a hint and I will stop.
>
> Actually, when MAX_RT interrupt is triggered, anything transmitted
> after is considered a new transaction, as per ch. 7.8.7.
>
> If the above correct, a multi-payload protocol may need to cater for:
> [1] duplicate payloads
> [2] lost payloads
> ???
>
> I have rewritten Write(), to be close to `SCC.SubSnd', reusing payloads
> after MAX_RT with `5' retries. I now also report the full status.
>
> bool RF24::write( const void* buf, uint8_t len, const bool multicast )
> {
> uint8_t status;
> uint32_t stry;
>
> //Copy payload and start transmitting with ce(HIGH)
> startFastWrite(buf,len,multicast);
>
> stry = 5; // SEND_TRIES
> do {
>
> //Wait until complete or failed
> uint32_t timer = millis();
> while( ! ( (status = get_status()) & ( _BV(TX_DS) | _BV(MAX_RT) ))) {
> if(millis() - timer > 95){
> errNotify(); // no response from radio, check wires
> return 0;
> }
>
> }
>
> ce(LOW);
>
> printf("status %d %d\n", status, stry);
> if ( status & _BV(TX_DS) ) write_register(NRF_STATUS, _BV(TX_DS));
> else if ( status & _BV(MAX_RT) ) {
> // write_register(NRF_STATUS, _BV(MAX_RT)); flush_tx();
> delay(5); // some millis
> reUseTX(); // reuse payload reset MAX_RT and start over
> }
>
> } while ( --stry && ! (status & _BV(TX_DS)) );
>
> flush_tx(); // clear TX_FIFO
> return ( status & _BV(TX_DS) );
> }
>
>
> Oberon end:
> ----------
>
> Test.Mod receiving 640
>
> 0000000000000000000000000000000
> 1111111111111111111111111111111
> 2222222222222222222222222222222
> 3333333333333333333333333333333
> 4444444444444444444444444444444
> 5555555555555555555555555555555
> 6666666666666666666666665555555
> 6666666666666666666666666666666
> 7777777777777777777777776666666
> 7777777777777777777777777777777
> 8888888888888888888888888888888
> 9999999999999999999999999999999
> 0000000000000000000000000000000
> 1111111111111111111111111111111
> 2222222222222222222222222222222
> 3333333333333333333333333333333
> 6666666666666666666666666666666
> 7777777777777777777777777777777
> 8888888888888888888888888888888
> 9999999999999999999999999999
>
>
> Transmit log:
> ------------
>
> 65 14 86 177
> Test.Mod sending
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 30 5
> status 46 4 <== duplicate
> status 30 5
> status 46 4 <== duplicate
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 30 5
> status 30 4
> status 30 3
> status 30 2
> status 30 1 <== lost
> 17 0 86 177 512
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> status 46 5
> 18 0 86 177 128
> 640
>
> --
> Tomas Kral <thomas.kral at email.cz>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list