NRF24L01+ China-Kracher: Bug oder Feature?

Gast #4444379
Lesenswert?
• ▲
▼
Hallo,

beim Debuggen vieler Register um der Ursache auf den Grund zu gehen, 
warum die sch... Dinger immer wieder "einfrieren" fiel mir das hier auf:

Ich lese die Payload zurück mit unten stehendem Code. Dabei fiel auf 
dass im Register Fifo_Status die Zahl 0x17 stand. Häh? Fifo is full und 
Fifo is empty zugleich? Yupp... mehrfach getestet indem ich dem Modul 1 
oder 2 Payload schickte. Das Flag FIFO Full setzt sich nicht zurück. 
Müsste es aber ... nur vergleiche ich hier wieder eine Klon Chip mit dem 
Original Datenblatt....argh.

Kann das jemand so bestätigen?
1
void EXTI1_IRQHandler()
2
{
3
    /* IRQ Flag prüfen auf Fehlinterrupt*/
4
    if (EXTI_GetITStatus(EXTI_Line1) == RESET)
5
        return;
6

7
    CE_LOW; 
8

9
    /* Ist das Fifo Status RX Data Bit gesetzt? */
10
    uint8_t status = RF_ReadRegSingle(NRF24L01_REG_FIFO_STATUS);
11
    if ((status & 0x01) == 0)
12
    {
13
        /* RF Modul auslesen */
14
        uint8_t*ptr = (uint8_t*)&rf_data;
15
        CSN_LOW;
16
        SPI_TransferByte(NRF24L01_CMD_R_RX_PAYLOAD);
17
        for (uint8_t i = 0; i < RF_Payload_size; i++)
18
            *(ptr++) = SPI_TransferByte(0xff);
19
        CSN_HIGH;
20

21
        CLEAR_STATUS;
22

23
        /* Fifo Status prüfen und ggf. Restmüll auslesen */
24
        uint8_t stat = RF_ReadRegSingle(NRF24L01_REG_FIFO_STATUS);
25
        do {
26
            if ((stat & 0x01) == 0) {
27
                CSN_LOW;
28
                SPI_TransferByte(NRF24L01_CMD_R_RX_PAYLOAD);
29
                for (uint8_t i = 0; i < RF_Payload_size; i++)
30
                   SPI_TransferByte(0xff);
31
                CSN_HIGH;
32
            }
33
            stat = RF_ReadRegSingle(NRF24L01_REG_FIFO_STATUS);
34
        } while ((stat & 0x01) == 0);
35

36
usw. usw.
Angehängte Dateien:
Gast #4444653
Lesenswert?
• ▲
▼
Beim ersten Mal wars ganz sicher ein Bug im GCC, diesmal ist der 
Chiphersteller schuld. Was kommt als nächstes, du findest einen Fehler 
in deinem Taschenrechner, den ganz sicher SIE zu verantworten haben?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.