Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 12 mar 2026, o 12:07


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 19 sty 2015, o 23:01 
Offline
Nowy

Dołączył(a): 19 sty 2015
Posty: 2
Pomógł: 0

Przepraszam, że zawracam głowę, ale mam taki problem: przerobiłem komunikację przez sprzętowe SPI mikrokontrolera z kartą SD korzystając z biblioteki PetitFS z niebieskiej książki Pana Mirka( i działa), ale gdy próbuję to zrobić przez programowe SPI to nie działa w żaden sposób. Wie ktoś może w jaki sposób można zmodyfikować biblioteki PetitFS żeby móc odbierać dane przez programowe SPI. Dodam, że z mikrokontrolerami mam do czynienia od niedawna, a mam w pewnym sensie nóż na szyi. Z góry dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sty 2015, o 18:22 
Offline
Nowy

Dołączył(a): 19 sty 2015
Posty: 2
Pomógł: 0

W pliku mmc.c z biblioteki Petit Fat modyfikowałem funkcje do wysyłania i odbierania. Korzystałem z biblioteki zmodyfikowanej według niebieskiej książki Pana Mirka:

#define _WRITE_FUNC 1

#include <avr/io.h>
#include "diskio.h"

#define SPI_MOSI PD1
#define SPI_MISO PD0
#define SPI_SCK PD2
#define SPI_CS PD3


/* Definitions for MMC/SDC command */
#define CMD0 (0x40+0) /* GO_IDLE_STATE */
#define CMD1 (0x40+1) /* SEND_OP_COND (MMC) */
#define ACMD41 (0xC0+41) /* SEND_OP_COND (SDC) */
#define CMD8 (0x40+8) /* SEND_IF_COND */
#define CMD16 (0x40+16) /* SET_BLOCKLEN */
#define CMD17 (0x40+17) /* READ_SINGLE_BLOCK */
#define CMD24 (0x40+24) /* WRITE_BLOCK */
#define CMD55 (0x40+55) /* APP_CMD */
#define CMD58 (0x40+58) /* READ_OCR */


BYTE rcv_spi (void)
{
unsigned char dat=0;
unsigned char cnt = 8;
while (cnt--) {
if (dat & 0x80) PORTD |= (1<<SPI_MOSI);
else PORTD &= ~(1<<SPI_MOSI);
PORTD |= (1<<SPI_SCK);
dat <<= 1;
if (PIND & (1<<SPI_MISO)) dat++;
PORTD &= ~(1<<SPI_SCK);
}

return dat;
}

xmit_spi(dat)
{
PORTD &= ~(1<<SPI_CS);
for(uint8_t loop = 0;loop<8;loop++)
{
PORTD &= ~(1<<SPI_SCK);
if((dat & 0x80))
{
PORTD |= (1<<SPI_MOSI);
}
else
{
PORTD &= ~(1<<SPI_MOSI);
}
dat <<=1;
PORTD |= (1<<SPI_SCK);
}
PORTD |= (1<<SPI_CS);
}




/* Port Controls (Platform dependent) */
/* Port Controls (Platform dependent) */
#define SELECT() PORTD &= ~(1<<PD3) /* MMC CS = L */
#define DESELECT() PORTD |= (1<<PD3) /* MMC CS = H */
#define MMC_SEL !(PORTD & (1<<PD3)) /* MMC CS status (true:selected) */



Reszta została bez zmian. Co tu może być nie tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sty 2015, o 15:56 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2015, o 14:30 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

grzesiukot napisał(a):
Wie ktoś może w jaki sposób można zmodyfikować biblioteki PetitFS żeby móc odbierać dane przez programowe SPI.
W FATFS jest taki przykład już zrobiony. Szukaj w folderze avr_foolproof
FatFs sample projects for various platforms
Jeśli masz dużo pamięci skorzystaj z gotowca, a jak nie to porównaj sobie tamte funkcje ze swoimi.

grzesiukot napisał(a):
Reszta została bez zmian. Co tu może być nie tak?

Brak sterowania SPI_CS w rcv_spi

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO