Witam. Piszę, bo może ktoś chłodnym okiem zobaczy to czego ja nie widzę.
Uruchomiłem bibliotekę FAT FS na XM128, na programowym SPI działa mi dobrze a na sprzętowym nie działa prawidłowo odczyt z karty.
Obsługę SPI mam sprawdzoną, pisałem pod Petit Fat FS i działało, tu jest różnica taka, że funkcja wysyłająca czy odczytująca odczytuje od razu ciąg bajtów do bufora, w Petit odczytywało tylko jeden.
SPI działa, bo zapis jest prawidłowy (próbowałem funkcji mieszanych, odczyt programowym SPI a zapis sprzętowym i działało) natomiast odczytać nie mogę.
Tak wygląda orginalna funkcja odczytująca:
A tak moja:
Spi na porcie D, podłączenie prawidłowe bo zapis działa.
konfiguracja SPI na pierwszy odczyt/zapis MSB więc tak jak w sprzętowym, szybkości próbowałem różne, na żadnych nie chce ruszyć.
Coś nie tak jest z tym "wezwaniem karty" do wysyłania danych.
W petit wysyłało się 0xff i się czytało, tu w sprogramowym widzę, że na DI wystawiona jest jedynka i potem czytane, próbowałem i tak ale też nie działa.
Może coś tam z "daleka" widać?
Bo ja z "bliska" nic nie mogę zobaczyć..
Uruchomiłem bibliotekę FAT FS na XM128, na programowym SPI działa mi dobrze a na sprzętowym nie działa prawidłowo odczyt z karty.
Obsługę SPI mam sprawdzoną, pisałem pod Petit Fat FS i działało, tu jest różnica taka, że funkcja wysyłająca czy odczytująca odczytuje od razu ciąg bajtów do bufora, w Petit odczytywało tylko jeden.
SPI działa, bo zapis jest prawidłowy (próbowałem funkcji mieszanych, odczyt programowym SPI a zapis sprzętowym i działało) natomiast odczytać nie mogę.
Tak wygląda orginalna funkcja odczytująca:
static
void rcvr_mmc (
BYTE *buff, //* Pointer to read buffer *
UINT bc //* Number of bytes to receive *
)
{
BYTE r;
DI_H(); /* Send 0xFF */
do {
r = 0; if (DO) r++; /* bit7 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit6 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit5 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit4 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit3 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit2 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit1 */
CK_H(); CK_L();
r <<= 1; if (DO) r++; /* bit0 */
CK_H(); CK_L();
*buff++ = r; /* Store a received byte */
} while (--bc);
}
A tak moja:
static
void rcvr_mmc (
BYTE *buff, //* Pointer to read buffer *
UINT bc //* Number of bytes to receive *
)
{
BYTE r;
xmit_mmc(0xff,1);
do{
r=SPID.DATA;
*buff++ = r;
} while (--bc);
}
Spi na porcie D, podłączenie prawidłowe bo zapis działa.
konfiguracja SPI na pierwszy odczyt/zapis MSB więc tak jak w sprzętowym, szybkości próbowałem różne, na żadnych nie chce ruszyć.
Coś nie tak jest z tym "wezwaniem karty" do wysyłania danych.
W petit wysyłało się 0xff i się czytało, tu w sprogramowym widzę, że na DI wystawiona jest jedynka i potem czytane, próbowałem i tak ale też nie działa.
Może coś tam z "daleka" widać?