Forum: Mikrocontroller und Digitale Elektronik spi-Fehler in Elm Chans foolpoof?


von grundschüler (Gast)


Lesenswert?

1
*-----------------------------------------------------------------------*/
2
/* Receive bytes from the card (bitbanging)                              */
3
/*-----------------------------------------------------------------------*/
4
5
static
6
void rcvr_mmc (
7
  BYTE *buff,  /* Pointer to read buffer */
8
  UINT bc    /* Number of bytes to receive */
9
)
10
{
11
  BYTE r;
12
13
14
  DI_H();  /* Send 0xFF */
15
16
  do {
17
    r = 0;   if (DO) r++;  /* bit7 */
18
    CK_H(); CK_L();
19
    r <<= 1; if (DO) r++;  /* bit6 */
20
    CK_H(); CK_L();
21
    r <<= 1; if (DO) r++;  /* bit5 */
22
    CK_H(); CK_L();
23
    r <<= 1; if (DO) r++;  /* bit4 */
24
    CK_H(); CK_L();
25
    r <<= 1; if (DO) r++;  /* bit3 */
26
    CK_H(); CK_L();
27
    r <<= 1; if (DO) r++;  /* bit2 */
28
    CK_H(); CK_L();
29
    r <<= 1; if (DO) r++;  /* bit1 */
30
    CK_H(); CK_L();
31
    r <<= 1; if (DO) r++;  /* bit0 */
32
    CK_H(); CK_L();
33
    *buff++ = r;      /* Store a received byte */
34
  } while (--bc);
35
}

Müsste nicht zuerst das CK-Signal kommen bevor Miso ausgewertet wird?
r = 0;  CK_H(); CK_L(); if (DO) r++;  /* bit7 */

Damit verschieben sich alle Bits um eine Stelle. Wieso funktioniert es 
trotzdem?

von Falk B. (falk)


Lesenswert?

@ grundschüler (Gast)

>Müsste nicht zuerst das CK-Signal kommen bevor Miso ausgewertet wird?
>r = 0;  CK_H(); CK_L(); if (DO) r++;  /* bit7 */

Nein, Bit 7 liegt sofort an, nachem CS aktiv wird. Denn dort wird ja 
auch vom Master das 1. Bit für den Slave an MOSI aktiv. Die 1. 
Taktflanke schiebt schon das 2. Bit auf MISO raus.

Zeichne es einfach mal auf.

von grundschüler (Gast)


Lesenswert?

danke, ich habe mich mit dem spimode vertan.

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.