Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięCompactFlash + FAT na ATMega128
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Witam,
mam pewien problemik z CF (SanDisk32MB) pod kontrola ATMega128,
mianowicie kiedy zaloze partycje na CF z poziomu Windowsa to wyrzuca mi err 20 -> http://members.aon.at/voegel/Help/AVR_D ... System.htm (20 cpSectorSizeNotSupported Only sector size of 512 Bytes is supported)
z kolei po FDISK i FORMAT z poziomu DOS 6 zwraca err 18 cpNoPBR No Partition Sector
skorzystalem z bibliotek zawartych tu -> http://members.aon.at/voegel/
niestety nie wiem jak w koncu zainicjowac to ustrojstwo, czy CF wymaga specjalnego formatowania lub zakladania partycji aby byl widoczny przez M128?
zalezy mi na uruchomieniu tego w BASCOM-ie
dzieki za jakas pomoc i informacje
mam pewien problemik z CF (SanDisk32MB) pod kontrola ATMega128,
mianowicie kiedy zaloze partycje na CF z poziomu Windowsa to wyrzuca mi err 20 -> http://members.aon.at/voegel/Help/AVR_D ... System.htm (20 cpSectorSizeNotSupported Only sector size of 512 Bytes is supported)
z kolei po FDISK i FORMAT z poziomu DOS 6 zwraca err 18 cpNoPBR No Partition Sector
skorzystalem z bibliotek zawartych tu -> http://members.aon.at/voegel/
niestety nie wiem jak w koncu zainicjowac to ustrojstwo, czy CF wymaga specjalnego formatowania lub zakladania partycji aby byl widoczny przez M128?
zalezy mi na uruchomieniu tego w BASCOM-ie
dzieki za jakas pomoc i informacje
O witam, mailowalem do Pana kolegi jednak cos system pocztowy zwrocil mi przesylke
tzn. dzieje sie tak:
Zakladam partycje na CF z poz. Win, formatuje, jest jedna podstawowa, OS w PC poprawnie wspolpracuje
wynik po usadowieniu CF pod M128:
zwraca kod bledu 20 /Berrorcode = Initfilesystem(1)/
przy inicjacji /Initfilesystem(0)/ takze err 20
test 2:
usuniecie partycji i zalozenie tym razem z DOS 6.0
zwrocony kod bledu = 18 przy /Initfilesystem(1)/
przy /Initfilesystem(0)/ zwraca kod 19 ktory informuje o obsludze jedynie tablic FAT
problem opisalem rowniez na lamach tego -> http://www.elektroda.pl/rtvforum/viewto ... ?p=1409950 forum
tzn. dzieje sie tak:
Zakladam partycje na CF z poz. Win, formatuje, jest jedna podstawowa, OS w PC poprawnie wspolpracuje
wynik po usadowieniu CF pod M128:
zwraca kod bledu 20 /Berrorcode = Initfilesystem(1)/
przy inicjacji /Initfilesystem(0)/ takze err 20
test 2:
usuniecie partycji i zalozenie tym razem z DOS 6.0
zwrocony kod bledu = 18 przy /Initfilesystem(1)/
przy /Initfilesystem(0)/ zwraca kod 19 ktory informuje o obsludze jedynie tablic FAT
problem opisalem rowniez na lamach tego -> http://www.elektroda.pl/rtvforum/viewto ... ?p=1409950 forum
Wydaje mi się, że problem tkwi w tym, że Windows i fdisk zakładają partycję FAT32, a biblioteka z http://members.aon.at/voegel/ operuje na FAT16.
Doszedłem do tego wniosku po przeanalizowaniu operacji jakie wykonuje ta biblioteka na dysku.
Doszedłem do tego wniosku po przeanalizowaniu operacji jakie wykonuje ta biblioteka na dysku.
jak juz napisalem wyzej kiedy zakladam partycje z DOS 6 to musi wyjsc FAT16 i nie ma innej mozliwosci
dokonywalem tez recznego przestawiannia typu systemu plikow przy pomocy programu Part (ma dostepne kilkanascie systemow) i tez rezultat byl ten sam
zakladalem nawet partycje 8MB, ktore system traktuje jako FAT12
jednym slowem temat systemow plikow mam przetestowany do max
przyczyna moze lezec w niekompatybilnosci programow konfiguracyjnych BAS i ich bibliotek, dlatego potrzebuje konkretnej, sprawdzonej, dzialajacej calej paczki, bo dotyczasowe zlepki tych elementow nie przynosza mi rezultatu
dokonywalem tez recznego przestawiannia typu systemu plikow przy pomocy programu Part (ma dostepne kilkanascie systemow) i tez rezultat byl ten sam
zakladalem nawet partycje 8MB, ktore system traktuje jako FAT12
jednym slowem temat systemow plikow mam przetestowany do max
przyczyna moze lezec w niekompatybilnosci programow konfiguracyjnych BAS i ich bibliotek, dlatego potrzebuje konkretnej, sprawdzonej, dzialajacej calej paczki, bo dotyczasowe zlepki tych elementow nie przynosza mi rezultatu
Na początek proponuję załadować do BASCOM-a plik przykładowy "FlashCard-demo.bas" i spróbować w symulatorze. Przedtem jednak zmieniamy (15 linia od góry):
Const Xramdrive = 0 ' 1 for XRAM Drive
na:
Const Xramdrive = 1 ' 1 for XRAM Drive
W opcjach kompilatora. Wybierasz:
CHIP : M128def.dat
XRAM : 64KB
Zaznaczasz External Access Enable
Teraz kompilacja. Program powinien zająć 9%-10% flasha. Uruchamiasz symulator. Na moim Bascom AVR 1.11.7.7 FULL, program działa do momentu użycia BLOAD i BSAVE (tutaj symulator się "sypnął").
Jeśli inicjalizacja i praca programu do tego momentu zadziała u ciebie to biblioteki i pliki configów są OK.
Najważniejsza jest ta część programu:
oraz konfiguracja systemowego zegara RTC (Config SofClock) gdyż wymaga go AVR-DOS.
Const Xramdrive = 0 ' 1 for XRAM Drive
na:
Const Xramdrive = 1 ' 1 for XRAM Drive
W opcjach kompilatora. Wybierasz:
CHIP : M128def.dat
XRAM : 64KB
Zaznaczasz External Access Enable
Teraz kompilacja. Program powinien zająć 9%-10% flasha. Uruchamiasz symulator. Na moim Bascom AVR 1.11.7.7 FULL, program działa do momentu użycia BLOAD i BSAVE (tutaj symulator się "sypnął").
Jeśli inicjalizacja i praca programu do tego momentu zadziała u ciebie to biblioteki i pliki configów są OK.
Najważniejsza jest ta część programu:
Kod: Zaznacz cały
' Tutaj możesz dołączyć sterowniki "napędu"
#if Xramdrive = 0
$Include "CONFIG_FlashCardDrive.bas" ' używamy CF-Interface (patrz schemat w helpie)
'$Include "CONFIG_FlashCardDrive_EL_PIN.bas" ' użyjemy Elektor CF-Interface
'$Include "CONFIG_FlashCard_MMC.bas" ' użyjemy MMCInterface (nie działa, Mark zapomniał dodać pliku do dystrybucji)
#else
$Include "CONFIG_XRAMDrive.bas" ' symulujemy kartę w pamięci zewnętrznej (najlepiej 64KB)
#endif
$include "CONFIG_AVR-DOS.Bas" ' definicje stałych AVR-DOS
' Inicjalizacja portów i karty
Print #1 , "Ustawiam porty i odpalam kartę ... ";
If Drivecheck() = 0 Then ' znaleziono kartę?
Print #1 , "Zrobione"
_temp1 = Driveinit() ' zainicjuj napęd
Else
Print #1 , "Brak karty w adapterze!"
End ' Albercik, wychodzimy!
End If
moze zaczne tak, postepujac z powyzszymi instrukcjami nie uzyskalem powolanego rezultatu
nastepnie uproscilem i spreparowalem sobie program do takiej postaci
niestety ostatnim widocznym dla mnie "punktem" jego dzialania jest linia Cls : Lcd "init ... " : Wait 1, tak jakby sie wieszal przy Initfilesystem(1)
CF jest sformatowany i pod PC pracuje poprawnie, kiedy podlaczam go do M128 jest wykrywany, wobec tego prosba, nie chce juz zadnych "super" testerow, dem itp.
po prostu ten kod ktory zamiescilem powyzej chcialbym uzupelnic, wiec interesuje mnie czego jeszcze potrzebuje aby to ustrojstwo w koncu uruchomic, tak aby na koncu tego kodu mozna bylo korzystac z typowych komend obslugi systemu plikow
BTW nie wiem co kierowalo autorem schematu elektrycznego aby pin B.1 bioracy udzial w programowaniu uC przez port RS232 zastosowac do obslugi CF
w "normalnych" warunkach pracy z CF jest on polaczony przez rezystor 10kOhm do Vcc co wyklucza programowanie CPU i zmusza do kazdorazowego odlaczania fizycznego adaptera karty
z kolei podczas pracy z karta trzeba za kazdym razem fizycznie odpinac programator gdyz przeklamuje komunikacje z CF (po takiej zonglerce mozna osiwiec)
cale szczescie, ze w kodzie mozna ten pin przeAlias-owac i przelutowac gdzie indziej
z gory dziekuje za pomoc, nie przypuszczalem, ze odpalenie systemu plikow na CF wymaga tyle zbednej kombinacji, cudowania i straty czasu
nastepnie uproscilem i spreparowalem sobie program do takiej postaci
Kod: Zaznacz cały
$regfile = "M128Def.dat"
$crystal = 10000000
$external Waitms
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 1a
Config Date = Dmy , Separator = .
Config Clock = Soft
Enable Interrupts
Time$ = "12:00:00" : Date$ = "05.05.03"
$Include "CONFIG_FlashCardDrive.bas"
$include "CONFIG_AVR-DOS.Bas"
Cls : Lcd "Setup Port and Reset Card ... " : Wait 1
If Drivecheck() = 0 Then
_temp1 = Driveinit()
Cls : Lcd "OK" : Wait 1
Else
Cls : Lcd "Card not inserted, check Card!" : Wait 1
End
End If
Cls : Lcd "init ... " : Wait 1
Dim Gbtemp1 As Byte
Gbtemp1 = Initfilesystem(1)
If Gbtemp1 > 0 Then
Cls : Lcd Gbtemp1 : Wait 1
Else
Cls : Lcd "Disksize : " ; Disksize() : Wait 1
Cls : Lcd "Disk free: " ; Diskfree() : Wait 1
End If
End
CF jest sformatowany i pod PC pracuje poprawnie, kiedy podlaczam go do M128 jest wykrywany, wobec tego prosba, nie chce juz zadnych "super" testerow, dem itp.
po prostu ten kod ktory zamiescilem powyzej chcialbym uzupelnic, wiec interesuje mnie czego jeszcze potrzebuje aby to ustrojstwo w koncu uruchomic, tak aby na koncu tego kodu mozna bylo korzystac z typowych komend obslugi systemu plikow
BTW nie wiem co kierowalo autorem schematu elektrycznego aby pin B.1 bioracy udzial w programowaniu uC przez port RS232 zastosowac do obslugi CF
w "normalnych" warunkach pracy z CF jest on polaczony przez rezystor 10kOhm do Vcc co wyklucza programowanie CPU i zmusza do kazdorazowego odlaczania fizycznego adaptera karty
z kolei podczas pracy z karta trzeba za kazdym razem fizycznie odpinac programator gdyz przeklamuje komunikacje z CF (po takiej zonglerce mozna osiwiec)
cale szczescie, ze w kodzie mozna ten pin przeAlias-owac i przelutowac gdzie indziej
z gory dziekuje za pomoc, nie przypuszczalem, ze odpalenie systemu plikow na CF wymaga tyle zbednej kombinacji, cudowania i straty czasu
Czy możesz uściślić Mój tok rozumowania.
- Wczytałeś program "FLASHCARD-DEMO.BAS", dokonałeś poprawek i wskazanych ustawień.
- Odpaliłeś ten program, a symulacja programu z wykorzystaniem wirtualnej karty (XRAMDrive) przebiegła 100% poprawnie (u Mnie działa, sypnięcie się symulatora to był jednak wypadek).
- Poźniej zmieniłes sterownik na "CONFIG_FlashCardDrive.bas", zmieniłeś z powrotem "Const XRAMDrive = 0" wyłączyłeś External Access Enable, użyłeś LCD zamiast terminala i próbowałeś odpalić ten sam program z wykorzystaniem realnej karty.
I jeszcze jedno, czy karta 32MB to jedyna jaką posiadasz? Próbowałeś na karcie o pojemności większej niż 32MB? To pytanie jest zasadnicze, gdyż zajrzałem teraz do książki "MS-DOS 5.0 od środka". Istnieją - chyba - dwa rodzaje partycji dla karty o rozmiarach 32MB. Skrócona lista numerów ID partycji:
00h - nie używana przez DOS, pusta
01h - DOS, FAT12
04h - DOS, FAT16, rozmiar < 32MB
05h - DOS Extendend (na dyski logiczne)
06h - DOS, FAT16, rozmiar >= 32MB
...
0Bh - Windows, FAT32
0Ch - Windows, FAT32 LBA
Możliwe, że karta 32MB (która de facto ma mniej niż 32MB!!) formatuje się z ID 04h i AVR-DOS jej nie trawi...
Spróbuj jeszcze utworzyć partycję jakimś innym programem, który pozwala wybrać dowolny ID partycji (Ranish Partition Manager) i utwórz: DOS, FAT16 >=32MB - czyli ID = 06h.
p.s. Widzę, że zmieniłeś posta, a ja pisałem odpowiedź off-line do poprzedniej wersji.
- Wczytałeś program "FLASHCARD-DEMO.BAS", dokonałeś poprawek i wskazanych ustawień.
- Odpaliłeś ten program, a symulacja programu z wykorzystaniem wirtualnej karty (XRAMDrive) przebiegła 100% poprawnie (u Mnie działa, sypnięcie się symulatora to był jednak wypadek).
- Poźniej zmieniłes sterownik na "CONFIG_FlashCardDrive.bas", zmieniłeś z powrotem "Const XRAMDrive = 0" wyłączyłeś External Access Enable, użyłeś LCD zamiast terminala i próbowałeś odpalić ten sam program z wykorzystaniem realnej karty.
I jeszcze jedno, czy karta 32MB to jedyna jaką posiadasz? Próbowałeś na karcie o pojemności większej niż 32MB? To pytanie jest zasadnicze, gdyż zajrzałem teraz do książki "MS-DOS 5.0 od środka". Istnieją - chyba - dwa rodzaje partycji dla karty o rozmiarach 32MB. Skrócona lista numerów ID partycji:
00h - nie używana przez DOS, pusta
01h - DOS, FAT12
04h - DOS, FAT16, rozmiar < 32MB
05h - DOS Extendend (na dyski logiczne)
06h - DOS, FAT16, rozmiar >= 32MB
...
0Bh - Windows, FAT32
0Ch - Windows, FAT32 LBA
Możliwe, że karta 32MB (która de facto ma mniej niż 32MB!!) formatuje się z ID 04h i AVR-DOS jej nie trawi...
Spróbuj jeszcze utworzyć partycję jakimś innym programem, który pozwala wybrać dowolny ID partycji (Ranish Partition Manager) i utwórz: DOS, FAT16 >=32MB - czyli ID = 06h.
p.s. Widzę, że zmieniłeś posta, a ja pisałem odpowiedź off-line do poprzedniej wersji.
Dokladnie tak Panie Zbigniewie, niestety na chwile obecna dysponuje tylko taka kartaCzy możesz uściślić Mój tok rozumowania.
- Wczytałeś program "FLASHCARD-DEMO.BAS", dokonałeś poprawek i wskazanych ustawień.
- Odpaliłeś ten program, a symulacja programu z wykorzystaniem wirtualnej karty (XRAMDrive) przebiegła 100% poprawnie (u Mnie działa, sypnięcie się symulatora to był jednak wypadek).
- Poźniej zmieniłes sterownik na "CONFIG_FlashCardDrive.bas", zmieniłeś z powrotem "Const XRAMDrive = 0" wyłączyłeś External Access Enable, użyłeś LCD zamiast terminala i próbowałeś odpalić ten sam program z wykorzystaniem realnej karty.[...]
jeszcze ciekawszym zjawiskiem jest taka sytuacja, kiedy to wprowadzam taki program
Kod: Zaznacz cały
$regfile = "M128Def.dat"
$crystal = 10000000
$external Waitms
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 1a
Config Date = Dmy , Separator = .
Config Clock = Soft
Enable Interrupts
Time$ = "12:00:00" : Date$ = "05.05.03"
$Include "CONFIG_FlashCardDrive.bas"
$include "CONFIG_AVR-DOS.Bas"
Dim Hhh As Byte
Cls : Lcd "Setup Port and Reset Card ... " : Wait 1
If Drivecheck() = 0 Then
Hhh = Driveinit()
Cls : Lcd Hhh : Wait 1
Dim Berror As Byte
Dim Abuffer(512) As Byte
Dim Wsrampointer As Word
Wsrampointer = Varptr(abuffer(1))
Berror = Drivegetidentity(wsrampointer)
Cls : Lcd "OK" ; Berror : Wait 1
Dim S As String * 16
Dim F As Word
For F = 1 To 512
S = S + Chr(abuffer(f))
If Len(s) = 16 Then S = Mid(s , 2)
Cls : Lcd S : Waitms 50
Next F
Else
Cls : Lcd "Card not inserted, check Card!" : Wait 1
End
End If
Cls : Lcd "init ... " : Wait 1
Dim Berrorcode As Byte
Berrorcode = Initfilesystem(1) 'musimy zainicjować system plików
If Berrorcode > 0 Then
Cls : Lcd "Błąd " ; Berrorcode
Else
Cls : Lcd "System plików zainicjowany poprawnie"
End If
End
po uruchomieniu powyzszego programu wszystko zdaje sie pracowac poprawnie na poczatku, petla FOR "wypluwa" zawartosc Drivegetidentity z CF na LCD, pozostale wyniki dzialania funkcji zwracaja 0 (no err) i tak dzieje sie niestety do nieszczesnego miejsca Initfilesystem(1) czyli ostatnie co widze na LCD to wlasnie "init ..."
jeszcze ciekawsze w tym wszystkim jest to, ze uklad i program zdaje sie dzialac losowo, poniewaz przy pierwszym uruchomieniu dochodzi do tego w/w etapu, kazde nastepne uruchomienie konczy sie juz w tym miejscu Cls : Lcd Hhh : Wait 1 czyli wysypuje sie tak jakby na Drivegetidentity(wsrampointer)
"odstanie" ukladu bez pwr dluzszy czas powoduje odpalenie sie programu nieco dalej do init
jestem juz calkiem zdesperowany, czy tylko mi sie trafily takie egzemplarze czy to jest norma przy uruchamianiu CF?
[ Dodano: 22-04-2005, 11:22 ]
dodam jeszcze post aby nie bylo problemow z odp. offline
wyzej zamieszczony program szukajac innej przyczyny oczyscilem z komentarzy, usunalem wszystkie PL znaki wyrzucane na LCD, wyremowalem procedurke generujaca driveintegrity i nadal mimo wszystko mechanizm staje na nieszczesnym init
stad moze taka propozycja, jesli nie sprawilo by to problemu czy dalo by rade podrzucic mi jakis sprawdzony gotowy skompilowany HEX, ktory dziala z jaks karta uzupelniony jedynie o config mojego LCD abym widzial do jakiego etapu i co w danej chwili sie dzieje
moze wtedy jakos bedzie latwiej ustalic przyczyne moich problemow, bylbym bardzo wdzieczny bo w sumie za duzo mozliwosci juz nie mam
[ Dodano: 22-04-2005, 12:30 ]
chcac wyeliminowac wszystkie watpliwosci zaopatrzylem sie w karte CF 128MB,
dokonalem takich samych testow jak z poprzednia (32MB) i rezultat dalej mam ten sam
kolejnym posunieciem w mojej despracji byla zmiana M128 na inny egzemplarz, zaprogramowanie go, sprawdzenie poprawnosci polaczen od strony elektrycznej i na koniec eksperymenty z dzieleniem zegara (moze 10MHz za szybko sie zachowuje) poprzez Clockdivison
oczywiscie rezultat w kolko ten sam
takze chyba nie obedzie sie bez sprawdzonego skompilowanego HEX-a
[ Dodano: 22-04-2005, 16:29 ]
kolejny wynik ostatnich testow:
pobralem nowsze wersje kodu z http://members.aon.at/voegel/Downloads.htm
program testowy adaptujac do LCD w tej postaciATMega128 you need:
In your project path:
-> Test_DOS_Drive.bas
-> Config_CompactFlash_M128.bas
-> Config_AVR-DOS.bas
-> FS_Interpreter.bas
in your Lib Path:
-> CF_HD.lbx
-> AVR-DOS.lbx
Kod: Zaznacz cały
$regfile = "M128def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 1a
Config Clock = Soft
Enable Interrupts
Config Date = Mdy , Separator = .
Dim Btemp1 As Byte
Cls : Lcd "Wait for Drive" : Wait 1
$Include "Config_CompactFlash_M128.bas"
If Gbdriveerror = 0 Then
$Include "Config_AVR-DOS.BAS"
Cls : Lcd "Init File System ... " : Wait 1
Btemp1 = Initfilesystem(1) ' Partition 1
If Btemp1 <> 0 Then
Cls : Lcd "Error: " ; Btemp1 ; " at Init file system" : Wait 1
Else
Cls : Lcd " OK" : Wait 1
Cls : Lcd "Filesystem: " ; Gbfilesystem : Wait 1
Cls : Lcd "FAT Start Sector: " ; Glfatfirstsector : Wait 1
Cls : Lcd "Root Start Sector: " ; Glrootfirstsector : Wait 1
Cls : Lcd "Data First Sector: " ; Gldatafirstsector : Wait 1
Cls : Lcd "Max. Cluster Nummber: " ; Gwmaxclusternumber : Wait 1
Cls : Lcd "Sectors per Cluster: " ; Gbsectorspercluster : Wait 1
Cls : Lcd "Root Entries: " ; Gwrootentries : Wait 1
Cls : Lcd "Sectors per FAT: " ; Gwsectorsperfat : Wait 1
Cls : Lcd "Number of FATs: " ; Gbnumberoffats : Wait 1
End If
Else
Cls : Lcd "Error Init: " ; Gbdriveerror : Wait 1
End If
$Include "FS_Interpreter.bas"
End
-> CF32MB - err 17 cpNoMBR Sector 0 on Card is not a Master Boot Record
-> CF128MB - err 18 cpNoPBR No Partition Sector
obie karty CF sa sformatowane pod FAT16 (DOS 06h)
W porzadku, mimo wszystko i tak dziekuje za zainteresowanie, swoj problem posrednio rozwiazalem
tzn nie wykorzystuje AVR-DOS tylko CF_HD.lib, teraz zczytuje sobie potrzebne dane niskopoziomowo, fakt, ze jest to mniej wygodne ale chociaz moge wykorzystac CF
najlepiej to przetestowac na plikach dzwiekowych, tok postepowania jest taki:
1. na CF wgrywam skonwretowany z wav PCM 8bit unsigned 11025Hz, ktory ma na poczatku wpisany unikatowy ciag, np. mus1 (mozna to zrobic HexEditor-em)
2. defragmentuje profilaktycznie CF zeby plik szed sektor po sektorze
3. taki CF skanuje programem A w poszukiwaniu pozycji pliku
4. potem zapuszczam prg B ktory sektor po sektorze odczytuje od tej pozycji plik i sobie gra (wysyla na D/A probki)
Takze wszystko wskazuje na to, ze komunikacja z CF dziala na obu kartach bez problemu jedynie system plikow szwankuje, sprawdze jeszcze z odflagowaniem tego fuse-a i dam znac
pozdr
tzn nie wykorzystuje AVR-DOS tylko CF_HD.lib, teraz zczytuje sobie potrzebne dane niskopoziomowo, fakt, ze jest to mniej wygodne ale chociaz moge wykorzystac CF
najlepiej to przetestowac na plikach dzwiekowych, tok postepowania jest taki:
1. na CF wgrywam skonwretowany z wav PCM 8bit unsigned 11025Hz, ktory ma na poczatku wpisany unikatowy ciag, np. mus1 (mozna to zrobic HexEditor-em)
2. defragmentuje profilaktycznie CF zeby plik szed sektor po sektorze
3. taki CF skanuje programem A w poszukiwaniu pozycji pliku
4. potem zapuszczam prg B ktory sektor po sektorze odczytuje od tej pozycji plik i sobie gra (wysyla na D/A probki)
$regfile = "M128def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 1a
Config Clock = Soft
Enable Interrupts
Config Date = Mdy , Separator = .
Cls : Lcd "Wait for Drive" : Wait 1
$Include "Config_CompactFlash_M128.bas" ' Does drive init too
If Gbdriveerror = 0 Then
Dim Berror As Byte
Dim Abuffer(512) As Byte
Dim Wsrampointer As Word
Wsrampointer = Varptr(abuffer(1))
Dim G As Long
Dim S As String * 512
Dim F As Word
Dim Sr As Byte
Cls : Lcd "find..." : Wait 1
For G = 1 To 65530
Berror = Drivereadsector(wsrampointer , G)
For F = 1 To 512
S = S + Chr(abuffer(f))
Next F
Sr = Instr(s , "symfonia")
If Sr > 0 Then
Cls : Lcd "s: " ; G ; " p: " ; Sr : Wait 1
End If
S = ""
Next G
Else
Cls : Lcd "Error Init: " ; Gbdriveerror : Wait 1
End If
End
Lepsze w jakosci dzwieku rezultaty mozna osiagac stosujac przerwania w procedurze odtwarzajacej, fakt, ze celem mojego ukladu nie jest budowa odtwarzacza MP3$regfile = "M128def.dat"
$crystal = 10000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 1a
Config Portf = Output
Config Clock = Soft
Enable Interrupts
Config Date = Mdy , Separator = .
Cls : Lcd "Wait for Drive" : Wait 1
$Include "Config_CompactFlash_M128.bas" ' Does drive init too
If Gbdriveerror = 0 Then
Dim Berror As Byte
Dim Abuffer(512) As Byte
Dim Wsrampointer As Word
Wsrampointer = Varptr(abuffer(1))
Dim G As Long
Dim F As Word
Cls : Lcd "play" : Wait 1
For G = 2790 To 65530
Berror = Drivereadsector(wsrampointer , G)
For F = 1 To 512
Portf = Abuffer(f) : Waitus 50
Next F
Next G
Else
Cls : Lcd "Error Init: " ; Gbdriveerror : Wait 1
End If
End
Takze wszystko wskazuje na to, ze komunikacja z CF dziala na obu kartach bez problemu jedynie system plikow szwankuje, sprawdze jeszcze z odflagowaniem tego fuse-a i dam znac
pozdr
Jeśli jescze masz ochotę się tym bawić (AVR-DOS) to możesz jeszcze spróbować zwiększyć dwukrotnie wartości przypisane parametrom HWStack, SWStack i Frame Space w opcjach kompilatora. Być może program się zawiesza nie przez błąd w AVR-DOS tylko przez przepełnienie któregoś ze stosów. Przecież InitFileSystem jest funkcją, a te korzystają intensywnie z tych obszarów.
Powitac
no niesety, ani fuse ani stosy czy tez Frame nie pomogly, po prostu wychodzi na to, ze avr-dos ma jakis bug skoro nawet te wszystkie zabiegi zawodza, dziwne, ze autor biblioteki o tym nie wie i tego nie koryguje
Swoja droga jak widze topic ten jest dosc licznie przegladany, jednak nikt w nim glosu nie zabral w kwestii tego, ze u niego to pracuje, stad tym bardziej potwierdzaja sie moje przypuszczenia iz jest to blad softu a nie jakichs niedopatrzen z naszej strony
jeszcze raz pozdrawiam i dzieki za zainteresowanie, pozostaje mi korzystanie w wlasnego "dos-a" inside DOS na CF
milego weekendu
no niesety, ani fuse ani stosy czy tez Frame nie pomogly, po prostu wychodzi na to, ze avr-dos ma jakis bug skoro nawet te wszystkie zabiegi zawodza, dziwne, ze autor biblioteki o tym nie wie i tego nie koryguje
Swoja droga jak widze topic ten jest dosc licznie przegladany, jednak nikt w nim glosu nie zabral w kwestii tego, ze u niego to pracuje, stad tym bardziej potwierdzaja sie moje przypuszczenia iz jest to blad softu a nie jakichs niedopatrzen z naszej strony
jeszcze raz pozdrawiam i dzieki za zainteresowanie, pozostaje mi korzystanie w wlasnego "dos-a" inside DOS na CF
milego weekendu
Witam,
Bardzo mnie zainteresował temat.
1.Czy dałoby się zrobić zapisywanie niewielkich danych na kartę MMC 16 MB przy pomocy Atmegi 8 ?
2. Czemu w programie nie ma funkcji INITFILESYSTEM ?
3. Czemu nie występują funkcje związane z configuracją SPI ?
4. Karta jest <32 MB, gdzie ustawia się o tym informacje, czy trzeba to robić ?
Proszę o odpowiedz chociaż na część pytań
Bardzo mnie zainteresował temat.
1.Czy dałoby się zrobić zapisywanie niewielkich danych na kartę MMC 16 MB przy pomocy Atmegi 8 ?
2. Czemu w programie nie ma funkcji INITFILESYSTEM ?
3. Czemu nie występują funkcje związane z configuracją SPI ?
4. Karta jest <32 MB, gdzie ustawia się o tym informacje, czy trzeba to robić ?
Proszę o odpowiedz chociaż na część pytań
Witam.
Używam CF oraz MMC z poziomu Atmegi128 i wszystko śmiga jak należy.
Radzę Ci stosować karty powyżej 256MB.
Jeśli CF masz podłączony na przewodach, to zapomnij, żeby to poszło a jeśli już spróbuj osłonić je dłonią dociskając do stołu i wtedy odpalić elektronikę. Swoją drogą, maleńki kondensatorek na jednej z linii (później sprawdzę na jakiej) zdecydowanie poprawia pracę.
W jednym z EP był nawet publikowany mój projekcik w oparciu kartę CF.
Pozdrawiam
Używam CF oraz MMC z poziomu Atmegi128 i wszystko śmiga jak należy.
Radzę Ci stosować karty powyżej 256MB.
Jeśli CF masz podłączony na przewodach, to zapomnij, żeby to poszło a jeśli już spróbuj osłonić je dłonią dociskając do stołu i wtedy odpalić elektronikę. Swoją drogą, maleńki kondensatorek na jednej z linii (później sprawdzę na jakiej) zdecydowanie poprawia pracę.
W jednym z EP był nawet publikowany mój projekcik w oparciu kartę CF.
Pozdrawiam
Dzięki za odpowiedzi
Chciałbym pobawić się MMC, programuje się je szeregowo przez SPI ?
Program chce napisać w Bascomie.
Ma to byc rejestrator temperatury, albo innej wielkosci. Pamięć MMC była by umieszczona blisko uP, a wyciągana okresowo w celu szczytania danych na PC.
Zaopatrzyłem się w artykuły z EP 5,6,7,8,9 z 2004 roku. Niewiem, czy po przeczytaniu tego wszystkiego będę w stanie zrobić to urządzenie.
Czy w razie trudności będę mógł na Ciebie liczyć.
Pozdrawiam
Chciałbym pobawić się MMC, programuje się je szeregowo przez SPI ?
Program chce napisać w Bascomie.
Ma to byc rejestrator temperatury, albo innej wielkosci. Pamięć MMC była by umieszczona blisko uP, a wyciągana okresowo w celu szczytania danych na PC.
Zaopatrzyłem się w artykuły z EP 5,6,7,8,9 z 2004 roku. Niewiem, czy po przeczytaniu tego wszystkiego będę w stanie zrobić to urządzenie.
Czy w razie trudności będę mógł na Ciebie liczyć.
Pozdrawiam
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 42 gości