Guten Morgen liebes Forum,
Zur Zeit versuche ich die Bilddaten eines ADNS3090-Sensors auszulesen.
Meine Daten auf der MISO zeigen ein komisches Verhalten. Laut Datenblatt
ist der SPI-Modus 3. Das Auslesen der Chip-ID klappt auch wunderbar.
Hier mein Code:
1 | /*SPI-Initialisierung*/
|
2 | //ADNS3090_NSS_LOW;
|
3 |
|
4 | SPI_I2S_DeInit(SPI2);
|
5 | SPI_InitTypeDef SPI_Init_ADNS3090;
|
6 | SPI_Init_ADNS3090.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
7 | SPI_Init_ADNS3090.SPI_DataSize = SPI_DataSize_16b;
|
8 | SPI_Init_ADNS3090.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
|
9 | SPI_Init_ADNS3090.SPI_CPHA = SPI_CPHA_2Edge;
|
10 | SPI_Init_ADNS3090.SPI_CPOL = SPI_CPOL_High;
|
11 | SPI_Init_ADNS3090.SPI_CRCPolynomial = 0;
|
12 | SPI_Init_ADNS3090.SPI_FirstBit = SPI_FirstBit_MSB;
|
13 | SPI_Init_ADNS3090.SPI_Mode = SPI_Mode_Master;
|
14 | SPI_Init_ADNS3090.SPI_NSS = SPI_NSS_Soft;
|
15 | SPI_Init(SPI2, &SPI_Init_ADNS3090);
|
16 | SPI_Cmd(SPI2, ENABLE);
|
17 | [c]
|
18 |
|
19 | und die Funktion:
|
20 | [c]
|
21 | void adns3090_FrameCapure_Config(void)
|
22 | {
|
23 | ADNS3090_NSS_LOW;
|
24 | adns3090_Write(SPI2, ADNS3090_FRAME_CAPTURE, 0x83);
|
25 | ADNS3090_NSS_HIGH;
|
26 | delay_nms(1510/1000);
|
27 | }
|
Kurze Funktionsbeschreibung:
Um den Inhalt des Frame-Register (0x13) auszulesen, muss der Wert 0x83
in dieses Register geschrieben werden. Die Writefunktion wird mit MSB=1
aktiviert. Also: 0x80&0x13 als Adresse und 0x83 als Wert = 0b10010011
0b10000011. Das liegt auch auf dem Bus. Aber warum verhält sich die
Antwort vom Sensors, also die Flanken so komisch (fast schon kapazitiv)?
Danke und Gruß
Daniel