DS1307_SD-MMC_FATEngine.spin

Allgemeine Themen rund um den Propeller Mikrocontroller und Elektronik
Antworten
Benutzeravatar
PIC18F2550
Beiträge: 2718
Registriert: Fr 30. Sep 2011, 13:08

DS1307_SD-MMC_FATEngine.spin

Beitrag von PIC18F2550 »

Ich hab da mal ein paar fragen ob das so geht.

ich such nach einer lösung wie ich auf zwei SD-Karten in 4 partitionen und mehrere Dateien gleichzeitig bearbeiten kann.


1. Nutzung mehrerer Dateien auf einer partitionen auf einer SD gleichzeitig.

Code: Alles auswählen

OBJ
  fat0: "DS1307_SD-MMC_FATEngine.spin"
  fat1: "DS1307_SD-MMC_FATEngine.spin"

PUB main | errorString
  ' "fatEngineStart" wird nur einmal aufgerufen. Jedes Treiberobjekt kann es aufrufen.
  fat0.fatEngineStart( _dopin, _clkpin, _dipin, _cspin, _wppin, _cdpin, _rtcdatpin, _rtcclkpin, _rtcbuslck)

  fat0.mountPartition(0)
  fat1.mountPartition(0)

  ' Try to create a new file.
  errorString1 := \fat0.newFile(string("Profile1.txt"))
  errorNumber1 :=  fat0.partitionError ' Returns zero if no error occurred.
  errorString2 := \fat1.newFile(string("Profile2.txt"))
  errorNumber2 :=  fat1.partitionError ' Returns zero if no error occurred.

  fat0.openFile(string("Profile1.txt"), "W")
  fat1.openFile(string("Profile2.txt"), "W")

  fat0.writeString(string("### SD Card Profile 1 ###", 13, 10, 13, 10))
  fat1.writeString(string("### SD Card Profile 2 ###", 13, 10, 13, 10))


  fat0.unmountPartition
  fat1.unmountPartition

1. Das ansprechen der Partitionen müsste so gehen hier dürfte es keine probleme geben

Code: Alles auswählen

  fat0.mountPartition(0)
  fat1.mountPartition(1)
Für das ansprechen mehrerer karten scheid es ein Problem zu geben -> ' "fatEngineStart" wird nur einmal aufgerufen. Jedes Treiberobjekt kann es aufrufen.
Eventuell kann man dem treiber dazu bewegen auf unterschiedlichen Pins zu wackeln.

Eventuell ist ein Swap der daten möglich?

Code: Alles auswählen

PUB FATEngineStart(DOPin, CLKPin, DIPin, CSPin, WPPin, CDPin, RTCDATPin, RTCCLKPin, I2CLock) '' 15 Stack Longs
....
  dataOutPin := (|<DOPin)
  clockPin := (|<CLKPin)
  dataInPin := (|<DIPin)
  chipSelectPin := (|<CSPin)
  writeProtectPin := ((|<WPPin) & (WPPin <> -1))
  cardDetectPin := ((|<CDPin) & (CDPin <> -1))
...
' /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'                       SDC Driver
' /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
' //////////////////////Pin Masks//////////////////////////////////////////////////////////////////////////////////////////////

dataOutPin              long    0
clockPin                long    0
dataInPin               long    0
chipSelectPin           long    0
writeProtectPin         long    0
cardDetectPin           long    0

' //////////////////////Addresses//////////////////////////////////////////////////////////////////////////////////////////////

blockPntrAddress        long    0
sectorPntrAddress       long    0
WPFlagAddress           long    0
CDFlagAddress           long    0
commandFlagAddress      long    0
errorFlagAddress        long    0
CSDRegisterAddress      long    0
CIDRegisterAddress      long    0



' //////////////////////Driver Variable Array//////////////////////////////////////////////////////////////////////////////////

cardBlockAddress        long 0 ' Address of the data block in memory to read bytes from and write bytes to.
cardSectorAddress       long 0 ' Address of the sector on the memory card to write bytes to and read bytes from.
cardWriteProtectedFlag  byte 0 ' The secure digital card driver write protected flag.
cardNotDetectedFlag     byte 0 ' The secure digital card driver not card detected flag.
cardCommandFlag         byte 0 ' The secure digital card driver method command flag.
cardErrorFlag           byte 0 ' The secure digital card driver method result flag.

CSDRegister             byte 0[16] ' The SD/MMC CSD register.
CIDRegister             byte 0[16] ' The SD/MMC CID register.

CIDPointer              long 0 ' Pointer to the SD/MMC CID register copy to compare.
Eventuell währe es einfacher den SDC Driver zweimal zu Starten.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
TuxFan
Beiträge: 1009
Registriert: So 6. Sep 2009, 11:18

Re: DS1307_SD-MMC_FATEngine.spin

Beitrag von TuxFan »

moin moin!
Ich hab das gleichzeitige Öffnen und Bearbeiten von zwei Dateien noch nicht selber ausprobiert, habe das aber schon mal gesehen, wenn ich nur noch wüsste wo. :? Es wurde der Treiber auch nur einmal gestartet. Soweit ich mich noch erinnere war das aber auch nur in einer Partition auf einer Karte. Ich könnte mir vorstellen, das das auch auf zwei verschiedenen Partitionen einer SD-Karte funktionieren kann.
Bei zwei SD-Karten an einem SPI-Bus und zwei verschiedenen CS-Pins ist jeweils beim Benutzen einer der SD-Karten das Starten und Beenden des Treibers erforderlich. Beim z.B. Kopieren von Dateien von einer Karte auf die andere, ist der Datentransfer mit Zwischenpuffer und Merken der aktuellen Positionen der beiden Dateien Pflicht. So ist das auch bei dem C3-SPI-Bus mit verschiedenen angeschlossenen Geräten. Wenn man da z.B. von SD-Karte auf Flash-Speicher Daten transferiert, muß ich bei großen Dateien einen Zwischenpuffer bemühen und die jeweiligen Dateipositionen merken.
Bei zwei SD-Karten an zwei verschiedenen SPI-Bussen sollte der Start von zwei Treibern mit den jeweiligen Pins möglich sein (Parallelbetrieb), sofern der Arbeitsspeicher ausreicht.
Das läuft dann so ähnlich wie der Betrieb von SD-Karte und ENC28J60 (Ethernet) an zwei verschiedenen SPI-Schnittstellen wie beim Webserver an dem ich im Moment programmtechnisch rumbastle.
Aber trotz aller Theorie, Versuch macht kluch......oder wie der Angelsachse sagt : Learning by doing. Das funktioniert bei sehr sehr vielen Programmänderungen aber nur so lange, wie das EEPROM am Propeller lebt. Sinnvoll ist hierbei die Benutzung von DIP Bausteinen. ;)
Gruß
TuxFan
Wunder gibt es immer wieder.......
Benutzeravatar
PIC18F2550
Beiträge: 2718
Registriert: Fr 30. Sep 2011, 13:08

Re: DS1307_SD-MMC_FATEngine.spin

Beitrag von PIC18F2550 »

Demonstrier wird das mit dem Treiber "Full File System Driver with DS1307 RTC" mit der enthaltenen !DS1307_SD_Card_Profiler.spin Datei.

Ebenso in So einem C3 paket von der Hydra.

Bei Verzicht auf gleichzeitiges arbeiten mit beiden SD-Karten könnte wenn noch etwas platz im COG ist mit der Änderung einer Variabeln was zu machen sein.

Code: Alles auswählen

chipSelectPin           long    0 ' Über diesen pin wird die Entsprechende Karte ausgewählt.
writeProtectPin         long    0 ' Verzicht
cardDetectPin           long    0 ' Verzicht
Leider ist chipSelectPin im COG und müsste mit rdword vorher neu gesetzt werden.

Bei "There are 33 ($021) Longs left in the cog " sollte doch noch was mach bar sein.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten