Oh...ich habe den Link in der Mail angeklickt und wurde gleich zu dem 3ten Beitrag geleitet![]()
Also ich benutze Hardware-SPI. Die Pins habe ich in der config_mmc.bas auf Port B geändert.
Zu dem 10uF Kondensator direkt am SD-Kartenslot: hast du den an die Masse und die 3,3V angelötet oder an eine Datenleitung?Code:-- ' THIS IS AN INCLUDE FILE ' DO NOT COMPILE $nocompile '------------------------------------------------------------------------------- ' Config_MMC.BAS ' Config File for MMC Flash Cards Driver ' (c) 2003-2005 , MCS Electronics / Vögel Franz Josef '------------------------------------------------------------------------------- ' Place MMC.LIB in the LIB-Path of BASCOM-AVR installation ' 'Connection as following 'MMC M644 '1 MMC_CS PORTB.4(0) '2 MOSI PORTB.5(2) '3 GND '4 +3.3V '5 CLOCK PORTB.7(1) '6 GND '7 MISO, PORTB.6(3) ' you can vary MMC_CS on HW-SPI and all pins on SOFT-SPI, check settings ' ========== Start of user definable range ===================================== ' you can use HW-SPI of the AVR (recommended) or a driver build in Soft-SPI, if ' the HW-SPI of the AVR is occupied by an other SPI-Device with different settings ' Declare here you SPI-Mode ' using HW-SPI: cMMC_Soft = 0 ' not using HW_SPI: cMMC_Soft = 1 Const Cmmc_soft = 0 #if Cmmc_soft = 0 ' --------- Start of Section for HW-SPI ---------------------------------------- ' define Chip-Select Pin Config Pinb.4 = Output ' define here Pin for CS of MMC/SD Card Mmc_cs Alias Portb.4 Set Mmc_cs ' Define here SS Pin of HW-SPI of the CPU (f.e. Pinb.0 on M128) Config Pinb.4 = Output ' define here Pin of SPI SS Spi_ss Alias Portb.4 Set Spi_ss ' Set SPI-SS to Output and High por Proper work of ' SPI as Master ' HW-SPI is configured to highest Speed Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 128 , Noss = 1 Spsr = 1 ' Double speed on ATMega128 Spiinit ' Init SPI ' --------- End of Section for HW-SPI ------------------------------------------ #else ' Config here SPI pins, if not using HW SPI ' --------- Start of Section for Soft-SPI -------------------------------------- ' Chip Select Pin => Pin 1 of MMC/SD Config Pinc.0 = Output Mmc_cs Alias Portc.0 Set Mmc_cs ' MOSI - Pin => Pin 2 of MMC/SD Config Pinc.1 = Output Set Pinc.1 Mmc_portmosi Alias Portc Bmmc_mosi Alias 1 ' MISO - Pin => Pin 7 of MMC/SD Config Pinc.2 = Input Mmc_portmiso Alias Pinc Bmmc_miso Alias 2 ' SCK - Pin => Pin 5 of MMC/SD Config Pinc.3 = Output Set Pinc.3 Mmc_portsck Alias Portc Bmmc_sck Alias 3 ' --------- End of Section for Soft-SPI ---------------------------------------- #endif ' ========== End of user definable range ======================================= ' Error Const Cperrdrivereset = 225 ' Error response Byte at Reset command Const Cperrdriveinit = 226 ' Error response Byte at Init Command Const Cperrdrivereadcommand = 227 ' Error response Byte at Read Command Const Cperrdrivewritecommand = 228 ' Error response Byte at Write Command Const Cperrdrivereadresponse = 229 ' No Data response Byte from MMC at Read Const Cperrdrivewriteresponse = 230 ' No Data response Byte from MMC at Write Const Cperrdrive = 231 Const Cperrdrivenotsupported = 232 ' return code for DriveGetIdentity, not supported yet Wait 1 ' Wait some time before initialising MMC/SD Dim Gbdriveerror As Byte ' General Driver Error register Dim Gbdriveerrorreg As Byte ' Driver load Error-Register of HD in case of error Dim Gbdrivestatusreg As Byte ' Driver load Status-Register of HD on case of error Dim Gbdrivedebug As Byte $lib "MMC.LIB" ' link driver library $external _mmc 'Gbdriveerror = Driveinit() ' Init MMC/SD Card
Aus meinem Code habe ich alle Berechnungen weggelassen, aber trozdem hat sich das Programm (in diesem fall) beim 10404ten schreiben aufgehängt(also nach fast 3 Stunden) (über Timer0 1 mal schreiben pro sec.) Erstaunlicherweise hat die "schreib LED" aber weiter geblinkt(nicht über Timer0)
nun hab ich den Timer gelöscht und statt dessen einen Schalter eingebaut. Leider selbes Ergebniss: ich kann nicht auf die Karte schreiben. Datei wurde vom µC erstellt, mit dem PC geöffnet, ein Leerzeichen hinzugefügt und gespeichert und schon konnte der µC wieder schreiben.
Eine Idee war, ob es mit der Pointerposition zu tun hat aber nachdem ich die Pointerposition eingebaut hatte ging es immer noch nicht.
Vielen Dank für deine Mühe!!!







Zitieren

Lesezeichen