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?