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.
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
Zu dem 10uF Kondensator direkt am SD-Kartenslot: hast du den an die Masse und die 3,3V angelötet oder an eine Datenleitung?
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!!!
Lesezeichen