⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 sd 卡读写程序 对需要学习与开发的人有用
💻 TXT
字号:
###############################################
# Willkommen bei Holgi's kleinem ATMega-DOS ! #
###############################################
24.05.2004

CompactFlash (CF) werden hier im 8 Bit Microcontroller Modus betrieben.
Die Ansteuerung hat nichts mit Festplatten zu tun. Die FAT-Routinen zum
lesen/schreiben von Dateien k鰊nte man aber 黚ernehmen.

Neu hinzugekommen sind Routinen f黵 die Ansteuerung von MultiMedia- (MMC)
und SecureDigital- (SD) Cards im SPI Modus. SD-Cards wurden aber noch nicht
getestet !

Alles was ab hier zu CF gesagt wird gilt auch f黵 MMC/SD.

Wer wissen m鯿hte wie schnell das ganze arbeitet findet in den Unterverzeichnissen
jeweils eine Datei readme.txt mit unverbindlichen Messungen ;)

###################
# Zur Geschichte: #
###################

Ziel des Projektes war es CompactFlash mit einem Microcontroller
zu lesen und zu schreiben weil ein 512kB Flash Eprom wie 29F040 manchmal
auch noch zu klein ist. Au遝rdem sollte eine einfache M鰃lichkeit her die
Daten auch mit dem PC zu lesen oder zu schreiben. Also am besten ein
FAT-Filesystem. Kann man mit jedem billigen CF-Reader lesen und
schreiben.

Beim Microcontroller sollte m鰃lichst kein externes RAM zum Einsatz
kommen. Das ist ganz gut gelungen. 1.2kB f黵 ein Dateisystem ohne
FAT-Buffer und 1.7kB mit FAT-Buffer passt noch gut in einen ATMega32.
Programmspeicherbedarf mit ALLEN Funktionen bisher unter 10kB (5k Worte).

Da die Routinen in C geschrieben sind d黵fte es nicht all zu schwer
sein das ganze auch auf 8051 (dann externes RAM) oder anderen Micro-
controllern zum laufen zu bringen. PIC's sind da leider keine gute
Wahl weil man wegen des RAM Bankings maximal 256 Byte RAM am St點k
bekommt. Das d黵fte recht kompliziert werden.

Hier eine 躡ersicht welche Funktionen man zur Zeit benutzen kann
ohne das man sich erst in FAT-Dateisysteme einarbeiten muss.

unsigned char GetDriveInformation(void);
unsigned char fopen(char *name, unsigned char flag);
unsigned int fread(unsigned char *buf, unsigned int numbytes);
unsigned int fwrite(unsigned char *buf, unsigned int numbytes);
void fflush(void);
void fclose(void);
unsigned char chdir(char *name);
unsigned char mkdir(char *name);
unsigned char remove(char *name);
unsigned char FindName(char *name);
unsigned char ReadFileRaw(char *name);

Namen und Parameter sind so weit wie m鰃lich an die DOS Funktionen
angelehnt die man auch vom PC her kennt. Es gibt allerdings
Unterschiede und Einschr鋘kungen. Siehe unten.

Zuerst einmal: Was geht nicht !
===============================
Lange Dateinamen werden nicht unterst黷zt. Sie st鰎en aber nicht
und k鰊nen bearbeitet werden wenn man den DOS Namen der Datei kennt.
Mehrere Dateien gleichzeitig 鰂fnen geht NICHT.
Eine Datei kann nur zum lesen ODER schreiben ge鰂fnet werden.
Man kann eine Datei nicht zum schreiben 鰂fnen und
alte Daten 黚erschreiben. Es wird IMMER hinten drangeh鋘gt.
Formatieren geht nat黵lich nicht.
Verzeichnisse l鰏chen geht nicht.
Noch kein fseek() Befehl vorhanden.
Es wird keine Kopie von der FAT angelegt. Scandisk meckert da !
Man kann nur mit der ersten Partition arbeiten.
Es gibt keine Laufwerksnamen wie C:
Pfadangaben in Dateinamen sind nicht erlaubt. Man kann mit chdir()
aber schrittweise in mehrere Unterverzeichnisse wechseln.

Was geht ?
==========
Das Programm unterst黷zt FAT12,FAT16 und FAT32 Dateisysteme.
Man kann Dateien lesen und neue Dateien erstellen.
Daten an vorhandene Dateien dranh鋘gen. Dateien l鰏chen.
Man kann neue Verzeichnisse erstellen. Auch in Unterverzeichnissen.
Man kann in Verzeichnisse wechseln und alle oben genannten Funktionen
darin ausf黨ren.
Alle Routinen arbeiten auch mit einer fragmentierten FAT !

RAM Speicherbedarf
==================
Ohne FATBuffer ca. 1,2kB RAM Bedarf
Mit FATBuffer ca. 1,7kB RAM Bedarf

!! Also nur f黵 die gr鲞eren ATMega ab ATMega32 !!!

Ohne FAT-Buffer ist nur f黵 reine Lesesysteme empfehlenswert.
Schreiben sollte man damit nicht. Siehe unten. Beim lesen kommt
man auch ohne FAT Buffer auf gute Geschwindigkeiten.

Schreiben ohne FAT Buffer
=========================
Schreiben ohne FAT Buffer ist keine gute Idee. Erstens kommt
man nicht richtig auf Geschwindigkeit wenn die FAT fragmentiert
ist, zweitens wird die FAT zu oft beschrieben. Das verk黵zt die
Lebensdauer des CF um einiges.

Beispiele CF mit unfragmentierter FAT ganz vollschreiben:

16 MB CF mit FAT12 3900 Cluster
Schreiben mit FAT-Buffer 39 FAT Schreibzyklen.
Schreiben ohne FAT-Buffer 7815 FAT Schreibzyklen.

32 MB CF mit FAT16 15569 Cluster
Schreiben mit FAT-Buffer 121 FAT Schreibzyklen.
Schreiben ohne FAT-Buffer 31137 FAT Schreibzyklen.

Ein 32MB CF hat z.B. 61 FAT Sektoren. Jeder Sektor wird ohne FAT Buffer
also ca. 510 mal beschrieben. Es gibt CF wo jeder Sektor nur 10000
mal beschrieben werden darf ! Das hei遲 aber nicht das der CF nach
20 Versuchen kaputt ist. CF haben eine Sektorreserve f黵 h鋟fig
beschriebene Sektoren. Sektoren werden AUTOMATISCH ersetzt wenn sie
nicht mehr beschreibbar sind. Der CF ist erst kaputt wenn diese Reserve
verbraucht ist. Moderne CF haben >100000 garantierte Schreibzyklen
pro Sektor. Mu

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -