Hallo,
ich versuche gerade zu verstehen, warum meine SPI Kommunikation mit
einem ADXL343 Accelerometer
(http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL343.pdf
) nicht funktioniert. Ich bin allerdings auch noch nicht sehr SPI
erfahren, deshalb hoffe ich auf ein paar Tips von euch:
Im Anhang seht ihr die Beschaltung des ADXL343 und die signale, die ich
mit dem LogicSniffer abfange, wenn ich mit meinem µC über SPI unter
Verwendung des Atmel Software Frameworks
1 |
|
2 |
|
3 | #define READSINGLE 0x80
|
4 | #define READMULTI 0xC0
|
5 | #define WRITESINGLE 0x00
|
6 | #define WRITEMULTI 0x40
|
7 |
|
8 | #define DEVID 0x00
|
9 | #define DATA_FORMAT 0x31
|
10 |
|
11 | while(1){
|
12 |
|
13 | uint8_t read =0xFF;
|
14 |
|
15 | uint8_t data1 []={(WRITESINGLE | DATA_FORMAT), 0x00};
|
16 | uint8_t data2 []={(READSINGLE | DEVID), 0x00};
|
17 |
|
18 | spi_select_device(SPI, &ADXL343);
|
19 | spi_write_packet(SPI, &data1, 2);
|
20 | //spi_deselect_device(SPI, &ADXL343);
|
21 | delay_us(50);
|
22 |
|
23 | //spi_select_device(SPI, &ADXL343);
|
24 | spi_write_packet(SPI, &data2, 2);
|
25 | spi_deselect_device(SPI, &ADXL343);
|
26 | delay_us(50);
|
27 |
|
28 |
|
29 | delay_ms(1);
|
30 |
|
31 | }
|
sende.
Zur Erklärung: Ich möchte hier das DATA_FORMAT Register resetten (auf
0x00 setzen), damit ich sicher im 4-wire SPI modus des ADXL bin. Danach
möchte ich die DEVID auslesen, die nach Datenblatt 0xE5 sein sollte.
Was ich mit dem Open Bench Logic analyzer aber sehe, ist, dass alle MOSI
daten über MISO wieder rausgeschleift werden. Kann mir jemand sagen was
ich falsch mache?
Zum Sniffer: Leitung 4 im Bild ist der direkte SDI pin des ADXL, d.h.
nach dem Logik-Gatter. Die Daten kommen also an.