Witam, mam procesor ATMEGA128 16AI zasilany z 5V i podłaczony do niego LCD i MMC zasilane 3.3V. Magistarla SPI została do nich podpięta przez rezystory poza klinią DO (data out karty MMC). Po włczeniu układ nie reaguje na odczyt zapis do karty MMC, może 3,3V z DO mmc nie jest rozróżniany przez AVRa jako stan wysoki? Wyświetlacz LCD działą dobrze i ma odzielne rezystory do SPI. Do sterowania kartą MMC użyłem biblioteki MMC.LIB z AVR-DOS.
Jeśli ktoś prubował użyć AVR-DOSA lub innych bibliotekl wstawek ASM w BAscomie to proszę o jakieś wskazówki bo mędzie sie z tą MMC drugi dzień.
Kod programu do testowania karty który nie działa:
Jeśli ktoś prubował użyć AVR-DOSA lub innych bibliotekl wstawek ASM w BAscomie to proszę o jakieś wskazówki bo mędzie sie z tą MMC drugi dzień.
Kod programu do testowania karty który nie działa:
Mmccs Alias Portb.6
Mmccs_pin Alias Pinb.6
Lcdres Alias Portb.5
Lcdcs Alias Portb.4
Mosix Alias Portb.2
Misox Alias Portb.3
Sckx Alias Portb.1
$regfile "m128def.dat" 'ATMEGA128 16AI
$lib "MMC.LIB" 'biblioteka AVR-DOS
$crystal = 16000000 'kwarc 16MHz
Config Porte = Input : Config Portb = Output : Config Portb.3 = Input 'ustaw ddr
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spsr = 1 'double speed
Spiinit 'SPCR=92
Waitms 1
Config Mmccs_pin = Output 'konfiguracja potrzebna dla MMC.LIB
Cs Alias Portb.6
_mmcp_cs Alias Portb
_mmc_cs Alias 0
Set Mmccs
Set Lcdcs
Dim Gbdriveerror As Byte
Dim Gbdriveerrorreg As Byte
Dim Gbdrivestatusreg As Byte
Dim Berror As Byte
Dim Abuffer(512) As Byte
Dim Wsrampointer As Word
Dim Lsectornumber As Long
Lcdres = 0 'reset LCD
Waitms 5
Lcdres = 1
Lcdcs = 1 'wyłącz sterownik LCD
Berror = Drivereset() 'inicjalizacja MMC
Berror = Driveinit()
Waitms 100
For Lsectornumber = 0 To 512 'zapisz przypadkowe dane do buforu
Abuffer(lsectornumber) = Rnd(255)
Next Lsectornumber
Wsrampointer = Varptr(abuffer(1))
Lsectornumber = 3
Berror = Drivewritesector(wsrampointer , Lsectornumber) 'zapis na karte
For Lsectornumber = 0 To 512 'wyczyść bufor
Abuffer(lsectornumber) = 0
Next Lsectornumber
Lsectornumber = 3
Berror = Drivereadsector(wsrampointer , Lsectornumber) 'odczyt danych z karty
DALSZA CZĘŚĆ PROGRAMU KTÓRA WYŚWIETLA ZCZY^TANY BLOK NA WYŚWIETLACZU LCD