Google+ Start   |   E-mail   |   Newsletter:

PetitFS - aktualizacja

W związku z często zgłaszanym problemem polegającym na tym, że czytelnikom nie zawsze udaje się zainicjalizować kartę, szczególnie po restarcie, w lekcji związanej z PetitFS, postanowiłem przygotować małą modyfikację kodu, która pozwala na wyeliminowanie tego problemu. Przy okazji, poprawimy delikatnie inicjalizację SPI, tak jak to miało miejsce w opisanym wyżej artykule dotyczącym FatFS.

 

Kod oryginalny z DVD
#define SCK PB7
#define MOSI PB5
#define CS PB4
      DDRB |= (1<<CS)|(1<<MOSI)|(1<<SCK)|(1<<CS);
      PORTB |= (1<<CS);
      SPCR |= (1<<SPE)|(1<<MSTR);
 
// .... pozostała część kodu
 
      res = disk_initialize();

Taka inicjalizacja SPI oraz jednorazowa próba inicjalizacji karty w PetitFS często prowadzą do błędu "disk init error", który ukazuje się na LCD z przykładowego programu.

  

Kod po wprowadzeniu poprawek
#define SCK PB7
#define MISO PB6
#define MOSI PB5
#define CS PB4
      DDRB |= (1<<CS)|(1<<MOSI)|(1<<SCK)|(1<<CS);
      PORTB |= (1<<CS)|(1<<MISO);
      SPCR |= (1<<SPE)|(1<<MSTR);
 
// .... pozostała część kodu
 
      uint8_t i=255;  // zmienna odpowiedzialna za timeout
      // dokonujemy wielokrotnej próby inicjalizacji karty
      while( i-- && (res = disk_initialize()) ); 

 dzięki takiej inicjalizacji program powinien działać poprawnie na na prawdę przeróżnych rodzajach kart pamięci, zarówno tych starszych jak i najnowszych.

 

ikona Strona główna ikona O nas ikona Wydawnictwo ikona Elektronika ikona Oprogramowanie ikona Kursy ATNEL ikona Nowości ikona SKLEP ikona FORUM ikona Kontakt ikona Polityka Prywatności Cookie

ATNEL Nowoczesne Rozwiązania - programowanie AVR w C | pisanie programów dla AVR | pisanie programów ATmega | pisanie programów dla AVR | programowanie mikrokontrolerów |
mikrokontrolery AVR programowanie | programowanie w C mikrokontrolerów | programowanie ATmega | programy w C AVR
Realizacja: Dpl Agency - Projektowanie Stron Internetowych