Hi, Ich versuch eine CF karte im Memory mode mit dieser hardware http://mcselec.com/an_123.htm anzusteuern. Hardwaretechnisch dürfte alles korrekt sein. Nur leider klappt nichtmal das Lesen und schreiben von registern :-(. Normalerweise müsste ja das RDY signal auf 1 gehen wenn die karte ready ist, nur bei mir ist es dauerhaft 0. (RDY leitung habe ich mit transistor an eine led gehängt) So läuft ungefähr mein init ab: Das reset Signal schalte ich einmal von 0 auf 1 um die karte zu resetten. CE lege ich auf masse. Dann müsste das RDY Signal doch eigentlich auf 1 gehen oder mache ich etwas falsch?? Als ich den Controller einmal programmiert habe und noch die CF karte noch im sockel hatte ging die led plötzlich an und nach dem programmieren sofort wieder aus. Weiß jedoch nit wieso.... Ich hoffe ihr könnt mir helfen! was mach ich beim init falsch?? danke schonmal im vorraus MFG Jörn
Hi, So, habe es endlich geschafft das lesen von Registern der CF karte funktioniert endlich. Für das status register erhalte ich einen wert von 0x50 und vom Error register lese ich 0x01. Kann das überhaupt sein ? Müsste das Error register nicht 0 sein weil ja im status register kein Error bit gesetzt ist??? Habe auch schon versucht in ein register zu schreiben und den wert dann wieder auszulesen allerdings war nie mein wert drin, scheint so als würde das schreiben von registern nicht funktionieren...?? QuellCode "lesen": .global CF_read_register .func CF_read_register CF_read_register: ldi r16, 0x00 ;0x00 nach r16 out DDRC, r16 ;Datenport auf Eingang stellen ldi r16, 0xff ;0xff nach r16 out PORTC, r16 ;Interne Pullups für PORTA aktivieren rcall CF_check_ready out CF_ADDR, r24 ;Addresse ausgeben cbi CF_CONTROL, CE cbi CF_CONTROL, OE ;RD=0 nop nop nop nop in r24, PINC ;Daten nach r24 lesen sbi CF_CONTROL, OE ;RD=1 sbi CF_CONTROL, CE ret .endfunc Quellcode "schreiben": .global CF_write_register .func CF_write_register CF_write_register: ldi r16, 0xFF ;0xFF nach r16 out DDRC, r16 ;Datenport auf Ausgang stellen out CF_ADDR, r24 ;Addresse ausgeben ldi r22, 0x24 out CF_DATA_PORT_WR, r22 ;Daten von r22 auf Datenport ausgeben rcall CF_check_ready cbi CF_CONTROL, OE nop nop cbi CF_CONTROL, WE ;WR=0 nop nop nop nop nop nop nop nop nop nop nop sbi CF_CONTROL, WE ;WR=1 nop nop sbi CF_CONTROL, OE ret .endfunc Sind die routinen so richtig oder habe ich was wichtiges vergessen? Bin für jede hilfe dankbar!! MFG Jörn M
Hi, hat denn keiner ne idee wo der fehler liegt?? bin langsam echt am verzweifeln.... MFG Jörn
Hi. Also mir scheint, dass deine Routinen eigentlich ganz ok sind, bis auf die Funktion zum Schreiben eines Registers. Was machst du da mit: "cbi CF_CONTROL, OE" Wenn mich nicht alles täuscht, sollte dies doch die RD Leitung sein, oder?? Könnte der Grund für das nicht funktionierende Schreiben eines Registers sein. Das Lesen des Statusregisters, scheint richtig funktioniert zu haben. Der Wert 0x50 ist in Ordnung, denke ich. Der Wert für das Error Register ist im Prinzip auch ok, da es nur einen gültigen Wert enthält, wenn im Statusregister auch das Error Bit gesetzt ist. Es muss also nicht 0 sein. Zu Testzwecken, würd ich dann mal das Commandregister mit dem Wert 0xEC füllen. Danach musst 512 Bytes vom Data-Register lesen. Der Befehl 0xEC heisst "Identify Device" und gibt dir einige kartenspezifische Infos zurück (Seriennummer, Versionsnummer, usw.). Mehr kannst dem CF Datasheet entnehmen. mfg Andreas -- Andreas Auer aauer1 (at) sbox.tugraz.at Student of Telematics http://home.pages.at/aauer1 Graz, University of Technology
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.