Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe bei einem CC1101 Projekt


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von „S“ „. (mt772)


Lesenswert?

Hallo,

ich habe einen kleinen Sender mit einem Attiny und einem CC1101 Chip, 
würde gerne das Protokoll klonen.

Habe LogicAnalyser und einen CC1111 USB Dongle zur Verfügung.

Binaber ehrlich gesagt noch nicht weit gekommen.

Macht es Sinn mit dem Logikanalyser die SPI Schnittstelle zu 
analysieren? MOSI, MISO, CLK ......

bin für jeden Tip dankbar.

von Horst-Detlev (Gast)


Lesenswert?

„S“ „. schrieb:
> Macht es Sinn mit dem Logikanalyser die SPI Schnittstelle zu
> analysieren? MOSI, MISO, CLK ......

Das dürfte der einzig sinnvolle Ansatz sein. Denn über die Schnittstelle 
"redet" Dein Tiny ja mit diesem Chip.

Also kannst Du Dir ansehen, was da alles gesendet wird, und das mit den 
Informationen im Datenblatt (ab S.29) abgleichen.

von „S“ „. (mt772)


Lesenswert?

Danke, ich probier mal was rauskommt.

von „S“ „. (mt772)


Angehängte Dateien:

Lesenswert?

Das ist bei raus gekommen. Jetzt muss ich wohl viel lesen.

von DerEchteHugo (Gast)


Lesenswert?

> Jetzt muss ich wohl viel lesen.

Das Wetter soll in den nächsten Tagen nicht besonders toll werden.

von „S“ „. (mt772)


Lesenswert?

Ich komme da auch nicht so recht weiter.

von Horst-Detlev (Gast)


Lesenswert?

Es werden immer zwei Bytes nacheinander gesendet. Das erste Byte besteht 
aus sechs Adressbits, einem Burst- und einem R/-W-Bit.

Bei Deinem Mitschrieb sind das also

0x36 0x3B

0x36 ist 0011 0110

Die obersten beiden Bits sind das R/-W-Bit und das Burst-Bit, hier also 
0. Die Adresse, die beschrieben wird, ist also 0x36. Dort wird der Wert 
0x3B 'reingeschrieben.

Was das nun bedeutet, findest Du im Datenblatt ab Seite 66.

Da gibt es "Command Strobe Registers", "Configuration Registers", 
"Status Registers" und einen "SPI Address Space".

Wofür das alles da ist? Keine Ahnung. Das wirst Du selbst rausfinden 
müssen.

Ist Dein Mitschrieb der Beginn der Kommunikation nach dem Einschalten 
Deines Geräts? Nur das dürfte irgendeinen Sinn haben, irgendwo 
mittendrin damit anzufangen ist bei der Komplexität des Dings hier 
sinnlos.

von Gerald K. (geku)


Lesenswert?

„S“ „. schrieb:
> Macht es Sinn mit dem Logikanalyser die SPI Schnittstelle zu
> analysieren? MOSI, MISO, CLK ......

Kommt darauf an wo das Problem liegt. Funktioniert die Kommunikation 
zwischen MC und CC1101 einwandfrei, dann braucht man die SPI Leitungen 
nicht beobachten.

Dann muss man sich auf die **richtige** Konfiguration des CC1101 
konzentrieren.

Welche Mitteln stehen zur Verfügung um den Programmablauf und 
Registerinhalte des MCs zu kontrollieren?

von Gerald K. (geku)


Lesenswert?

„S“ „. schrieb:
> Das ist bei raus gekommen. Jetzt muss ich wohl viel lesen.

Ich würde mit dem Kapital Initalisuerung und Konfiguration des CC1101 
beginnen.

Wie sehen die Antorten des CC1101 auf die Kommandos aus, sind diese 
plausibel?

Wichtig ist auch zu wissen wie die Konfiguration der Gegenstelle 
aussieht?

Ist die Gegenstelle während des Tests aktiv?


Ich habe vor der Benutzung der richtigen Gegenstelle einen primitiven 
Funkmodul ohne Konfigurationsmöglichkeiten genommen. Nur um zu 
beobachten was der CC1101 aussendet. Welche ISM Frequenz benutzt der 
Funkmodul?

von „S“ „. (mt772)


Lesenswert?

Glaube es übersteigt meine Fähigkeiten. :-(

von „S“ „. (mt772)


Lesenswert?

Ich habe den SPI Traffic mit den logicanalyser aufgezeichnet, komme aber 
nicht weiter.

Ziel ist es einen funktionieren CC1101 868 Transmitter zu clones bzw das 
Signal zu clones.

Gibt es hier einen CC1101 Experten der mir Helfen konnte? Soll ja nicht 
umsonst sein. Habe schonmal bei Fiverr usw geschaut, bin aber nicht 
fündig geworden.

von Michael D. (nospam2000)


Lesenswert?

„S“ „. schrieb:
> Ziel ist es einen funktionieren CC1101 868 Transmitter zu clones bzw das
> Signal zu clones.

Es gibt prinzipiell 2 Sequenzen:
1. die Initialisierung, typischerweise beim Einschalten
2. das Senden eines Kommandos bei einem Ereignis (z.B. Knopfdruck). 
Solange du nicht schreibst was das für ein Sender ist, und ob das 
Protokoll z.B. bi-direktional oder verschlüsselt ist (rolling code) wird 
es schwierig

Ändern sich die Daten für ein Kommando wenn du mehrmals dasselbe 
Kommando auslöst (z.B. Knopf drücken)? Dann wird es schwierig.

Das einfachste ist, alles blind zu clonen, d.h. die SPI Daten für die 
Initialisierung und die jeweiligen Kommandos aufzeichnen und genau so 
wieder schicken. Wenn das nicht funktioniert, würde ich das Projekt 
einstellen.

  Michael

von „S“ „. (mt772)


Lesenswert?

Nur Senden und immer das gleiche, denke er sendet eine ID.

Das werde ich mal probieren.

Konnte man aus den SPI nicht erkennen was er macht. In der TI 
Dokumentation sind ja codes drin.

Der CC1101 hat ja 199 Channel, mehrere Formate, Frequenzen usw

von Michael D. (nospam2000)


Lesenswert?

„S“ „. schrieb:
> Konnte man aus den SPI nicht erkennen was er macht. In der TI
> Dokumentation sind ja codes drin.

Klar, aber das ist deutlich mehr Aufwand und warum sollte man das tun 
wenn es nicht notwendig ist? Es hat sich ja auch noch kein Freiwilliger 
gemeldet das zu decodieren.

  Michael

von „S“ „. (mt772)


Lesenswert?

Glaube ich werde mit dem logic analyses mal schauen was an SPI lauft 
wenn ich CC1101 selber configuriere und Daten schicke. Dann Vergleich 
ich beide SPI Protokolle und schau mal.

von Peter D. (peda)


Lesenswert?

Hast Du mal versucht, den unbekannten ATtiny auszulesen?

von „S“ „. (mt772)


Lesenswert?

Bin anscheinend echt zu blöde. Muss ich den CC1101 mit smartRF 
configurieren oder geht das über die Librarys vom Arduino beim 
hochfahren??

von Michael D. (nospam2000)


Lesenswert?

„S“ „. schrieb:
> Bin anscheinend echt zu blöde. Muss ich den CC1101 mit smartRF
> configurieren oder geht das über die Librarys vom Arduino beim
> hochfahren??

Nimm die Arduino Lib, der von smartRF erzeugte Code ist nicht wirklich 
lesbar.

Hier ein 433 MHz Beispiel
1
    ELECHOUSE_cc1101.setSpiPin(sck, miso, mosi, ss);
2
    ELECHOUSE_cc1101.setGDO(gdo0,gdo2);      // set lib internal gdo pins (gdo0,gdo2).
3
    ELECHOUSE_cc1101.Init();                // must be set to initialize the cc1101!
4
5
    if (ELECHOUSE_cc1101.getCC1101()){         // Check the CC1101 Spi connection.
6
        Serial.println("Connection OK");
7
    }else{
8
        Serial.println("Connection Error");
9
    }
10
11
    ELECHOUSE_cc1101.setCCMode(1);          // set config for internal transmission mode.
12
    ELECHOUSE_cc1101.setModulation(2);      // set modulation mode. 0 = 2-FSK, 1 = GFSK, 2 = ASK/OOK, 3 = 4-FSK, 4 = MSK.
13
    ELECHOUSE_cc1101.setMHZ(434.031708);        // Here you can set your basic frequency. The lib calculates the frequency automatically (default = 433.92).The cc1101 can: 300-348 MHZ, 387-464MHZ and 779-928MHZ. Read More info from datasheet.
14
    //ELECHOUSE_cc1101.setDeviation(5.157471);   // Set the Frequency deviation in kHz. Value from 1.58 to 380.85. Default is 47.60 kHz.
15
    ELECHOUSE_cc1101.setChannel(0);         // Set the Channelnumber from 0 to 255. Default is cahnnel 0.
16
    ELECHOUSE_cc1101.setChsp(199.95);       // The channel spacing is multiplied by the channel number CHAN and added to the base frequency in kHz. Value from 25.39 to 405.45. Default is 199.95 kHz.
17
    //ELECHOUSE_cc1101.setRxBW(812.50);       // Set the Receive Bandwidth in kHz. Value from 58.03 to 812.50. Default is 812.50 kHz.
18
    ELECHOUSE_cc1101.setDRate(2.88248);       // Set the Data Rate in kBaud. Value from 0.02 to 1621.83. Default is 99.97 kBaud!
19
    ELECHOUSE_cc1101.setPA(10);             // Set TxPower. The following settings are possible depending on the frequency band.  (-30  -20  -15  -10  -6    0    5    7    10   11   12) Default is max!
20
    ELECHOUSE_cc1101.setSyncMode(0);        // Combined sync-word qualifier mode. 0 = No preamble/sync. 1 = 16 sync word bits detected. 2 = 16/16 sync word bits detected. 3 = 30/32 sync word bits detected. 4 = No preamble/sync, carrier-sense above threshold. 5 = 15/16 + carrier-sense above threshold. 6 = 16/16 + carrier-sense above threshold. 7 = 30/32 + carrier-sense above threshold.
21
    //ELECHOUSE_cc1101.setSyncWord(211, 145); // Set sync word. Must be the same for the transmitter and receiver. (Syncword high, Syncword low)
22
    ELECHOUSE_cc1101.setAdrChk(0);          // Controls address check configuration of received packages. 0 = No address check. 1 = Address check, no broadcast. 2 = Address check and 0 (0x00) broadcast. 3 = Address check and 0 (0x00) and 255 (0xFF) broadcast.
23
    ELECHOUSE_cc1101.setAddr(0);            // Address used for packet filtration. Optional broadcast addresses are 0 (0x00) and 255 (0xFF).
24
    ELECHOUSE_cc1101.setWhiteData(0);       // Turn data whitening on / off. 0 = Whitening off. 1 = Whitening on.
25
    ELECHOUSE_cc1101.setPktFormat(0);       // Format of RX and TX data. 0 = Normal mode, use FIFOs for RX and TX. 1 = Synchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins. 2 = Random TX mode; sends random data using PN9 generator. Used for test. Works as normal mode, setting 0 (00), in RX. 3 = Asynchronous serial mode, Data in on GDO0 and data out on either of the GDOx pins.
26
    ELECHOUSE_cc1101.setLengthConfig(0);    // 0 = Fixed packet length mode. 1 = Variable packet length mode. 2 = Infinite packet length mode. 3 = Reserved
27
    //ELECHOUSE_cc1101.setPacketLength(5);    // Indicates the packet length when fixed packet length mode is enabled. If variable packet length mode is used, this value indicates the maximum packet length allowed.
28
    ELECHOUSE_cc1101.setCrc(0);             // 1 = CRC calculation in TX and CRC check in RX enabled. 0 = CRC disabled for TX and RX.
29
    //ELECHOUSE_cc1101.setCRC_AF(0);          // Enable automatic flush of RX FIFO when CRC is not OK. This requires that only one packet is in the RXIFIFO and that packet length is limited to the RX FIFO size.
30
    ELECHOUSE_cc1101.setDcFilterOff(0);     // Disable digital DC blocking filter before demodulator. Only for data rates ≤ 250 kBaud The recommended IF frequency changes when the DC blocking is disabled. 1 = Disable (current optimized). 0 = Enable (better sensitivity).
31
    ELECHOUSE_cc1101.setManchester(0);      // Enables Manchester encoding/decoding. 0 = Disable. 1 = Enable.
32
    ELECHOUSE_cc1101.setFEC(0);             // Enable Forward Error Correction (FEC) with interleaving for packet payload (Only supported for fixed packet length mode. 0 = Disable. 1 = Enable.
33
    ELECHOUSE_cc1101.setPRE(0);             // Sets the minimum number of preamble bytes to be transmitted. Values: 0 : 2, 1 : 3, 2 : 4, 3 : 6, 4 : 8, 5 : 12, 6 : 16, 7 : 24
34
    ELECHOUSE_cc1101.setPQT(0);             // Preamble quality estimator threshold. The preamble quality estimator increases an internal counter by one each time a bit is received that is different from the previous bit, and decreases the counter by 8 each time a bit is received that is the same as the last bit. A threshold of 4∙PQT for this counter is used to gate sync word detection. When PQT=0 a sync word is always accepted.
35
    ELECHOUSE_cc1101.setAppendStatus(0);    // When enabled, two status bytes will be appended to the payload of the packet. The status bytes contain RSSI and LQI values, as well as CRC OK.
36
}

  Michael

: Bearbeitet durch User
von Sven (Gast)


Angehängte Dateien:

Lesenswert?

So sieht das SPI Protokoll vom original CC1101 aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.