mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CC2420 liefert seltsame Daten


Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein kleines Problem ordentliche Daten am CC2420 zu empfangen. 
Möchte einen Packet Sniffer bauen.

Zur Zeit bekomme ich über SPI immer die gleichen Daten, auch wenn kein 
Knoten sendet.

Folgende Register habe ich bisher gesetzt:
  // Adress_decode disabled
  MDMCTRL0_reg = SPI_ReceiveReg(0x51);
  MDMCTRL0_reg &= ~(0x0800);
  SPI_SendReg(0x11, MDMCTRL0_reg);

  // XOSC16M_PD + BIAS_PD = 0 für Crystal Oscillator (Command Strobe 0x01)
  MANAND_reg = SPI_ReceiveReg(0x61);
  MANAND_reg &= ~(0x4080);
  SPI_SendReg(0x11, MANAND_reg);

  PORTB &= ~(1<<DD_CS);             // CS\ low
  SPI_TxRx(0x01);
  SPI_TxRx(0x03);
  PORTB |= 1<<DD_CS;                // CS\ high

  setKanal();

Kann das von euch einer erklären wieso ich Daten bekomme, obwohl gar 
nichts gesendet wird? Das setzen und lesen der Register, sowie das 
einstellen des Kanals funktioniert 100%ig, auch wenn die Methoden nicht 
sichtbar ist.

Hoffe ihr könnt einem Anfänger helfen ;-)

Grüße
Dennis

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher weißt du denn, dass neue Daten empfangen wurden? Fragst du den 
FIFOP ab? Hast du dir die AppNote AN033 von TI angesehen? Da ist doch 
die komplette Ansteuerung des Chips für den Anschluss an MSP430 oder 
ATMega drin, du musst lediglich bei rfBasicReceive() was mit den 
empfangenen Daten machen...

Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die schnelle Antwort.
FIFOP frage ich wie folgt ab:
if(PORTE & (1<<CC_FIFOP)) {
  USART_Tx(SPI_ReceiveReg(0x7f));
  _delay_ms(25);
}

Jedoch hatte ich es raus genommen, da ich mit dieser Abfrage gar keine 
Daten empfange.
Die Appnote werde ich mir morgen ansehen. Für heute ist erst mal 
Feierabend ;-)

Melde mich morgen wieder mit neuen Informationen.

Noch einen schönen Sonntag abend!

Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich habe mir heute Vormittag die AppNote angesehen. Eigentlich 
würde ich die Konfiguration der Knoten gerne auf unterster ebene 
Durchführen. Somit helfen mir die Fertigen Methoden aus dem AppNote 
nicht. Aber ich habe mir die Vorgehensweise angesehen. Was nacheinander 
gemacht wird. Dazu ein paar Fragen:

1. Der Knoten sollte nur Pakete empfangen. Muss dazu STXON auch gesetzt 
werden? Wahrscheinlich nicht, oder?
2. Sind die Interrupts (FIFO / FIFOP) nötig, oder gehts auch ohne?
3. Ist eine Ad Hoc komunikation möglich indem ich einfach keinen PAN 
Koordinator festlege?

Und was bei mir auf jeden fall fehlt ist die Adresse des Knotens :D

Irgendwie denke ich jedoch, dass mich eine Besetigung der Fragen/Fehler 
noch nicht zum gewünschten Ziel bringen. Kann mir nicht vorstellen, dass 
ich dann trotz dem Daten empfange, die es eigentlich nicht geben sollte.

Vielleicht hast du noch eine Idee.

Grüße
Dennis

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Appnote von TI ist doch schon unterste Ebene. Für deinen 
Sniffer kannst du einfach einen Kanal einstellen und den Transceiver 
initialisieren. STX wird ja nur aktiviert, wenn du wirklich sendest. 
Koordinator-Adresse ist nicht nötig, wenn du eh was eigenes machen 
willst. FIFO/FIFOP musst du natürlich nicht verwenden, kannst ja auch 
das Register abpollen. Ist aber sinnbefreit.
Du kannst die Quellcodes ja 1:1 übernehmen, nur beim Initialisieren 
(basic_rf_init.c) musst du die Bits für die Paket-Filterung und das 
Auto-Ack  rausnehmen, damit du alle Pakte empfängst und nicht nur 
welche, die an dich gerichtet sind.

Klar kannst du auch das Rad nochmal erfinden, aber wozu?

Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider ist es eine Vorgabe, dass ich das "selber" mache. Aber wenigstens 
habe ich jetzt schon einmal einen Ablauf, wie ich vorgehen kann. 
Schreibe nämlich gerade meine Abschlussarbeit.

Eine Frage zum schreiben in den RAM:

Wenn ich versuche die Adresse zu setzen, dann übernimmt er das LSB, aber 
nicht das MSB (bleibt immer 0x00). Mein Code dazu sieht wie folgt aus:
uint8_t SPI_TxRx(uint8_t cData)
{
  SPDR = cData;
  while(!(SPSR & (1<<SPIF)));
  return SPDR;
}

uint8_t SPI_RxRam(uint16_t Address)
{
  uint8_t status;
  uint16_t data;

  PORTB &= ~(1<<DD_CS);             // CS\ low

  _delay_us(25);          

  status = SPI_TxRx((uint8_t)(Address>>8));
  SPI_TxRx((uint8_t)(Address & 0x00ff));
  data = (SPI_TxRx(0xff)<<8);
  data = data + (SPI_TxRx(0xff) & 0x00ff);

  PORTB |= 1<<DD_CS;                // CS\ high
  return data;
}

void SPI_TxRam(uint16_t Address, uint16_t data)
{
  uint8_t status;

  PORTB &= ~(1<<DD_CS);             // CS\ low
  
  _delay_us(25);          
  
  status = SPI_TxRx((uint8_t)(Address>>8));
  SPI_TxRx((uint8_t)(Address & 0x00ff));
  SPI_TxRx((uint8_t)(data>>8));
  SPI_TxRx((uint8_t)(data & 0x00ff));

  PORTB |= 1<<DD_CS;                // CS\ high
}

und in der main rufe ich es so auf:
SPI_TxRam(0xda80, 0xabcd);  // 0x016a

_delay_ms(1000);

USART_Tx((uint8_t)(SPI_RxRam(0xdaa0)>>8));    // 0x016a MSB
USART_Tx((uint8_t)(SPI_RxRam(0xdaa0) & 0x00ff));  // 0x016a LSB

Hoffe das es nur ein kleiner Fehler ist...

Grüße
Dennis

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.