Forum: Mikrocontroller und Digitale Elektronik sector 1 wird nur beschrieben obwohl ich die 3 angebe


von neuling (Gast)


Lesenswert?

hallo, ich habe ein programm mit fastavrbasic um die mmc-karte zu 
beschreiben.
ich kann die karte mit diesem code beschreiben, aber immer auf sector 0, 
obwohl ich sector 3 angebe.
die schiebefunktionen habe ich mit bascom ausprobiert , sind die 
gleichen wie mit fastavr, die einzelnen werte stimmen für den 
übergabebuffer überein.

mit bascom kann ich die karte ordentlich beschreiben , es wird der 
sector 3 beschrieben.

was sztimmt da nicht ??hm..


der code :
$Device = M32
$Stack = 32
$Clock = 8
$Baud = 19200
$ShiftOut Data=PORTB.1, Clock=PORTB.3, Msb
$ShiftIn Data=PORTB.2, Clock=PORTB.3, Msb

Declare Sub Mmc_init()
Declare Sub Mmc_write()

Dim Dout As Byte
Dim Din As Byte
Dim A As Word
Dim Cmd(6) As Byte
Dim Buffer(515) As Byte
Dim Tmp As Long
Dim Sector As Long

$Def Mcs =PORTB.0
$Def Sck =PORTB.3

DDRB.0=1

WaitMs 255
Sector = 3

Buffer(0) = &HFE
Buffer(513) = &HFF
Buffer(514) = &HFF

For A = 1 To 512
   Buffer(a) = 71
Next

Mmc_init()
WaitMs 255
Mmc_write()

End

Sub Mmc_init()

  Set Mcs

     Dout = &HFF
     For A = 0 To 10
        ShiftOut Dout
     Next

Anfang:
     Reset Mcs
     Cmd(0) = &H40
     Cmd(1) = 0
     Cmd(2) = 0
     Cmd(3) = 0
     Cmd(4) = 0
     Cmd(5) = &H95
     For A = 0 To 5
        ShiftOut Cmd(a)
     Next

  Dout = &HFF
  ShiftOut Dout

     din=ShiftIn
     If Din <> 1 Then
        GoTo Anfang
     End If
     Print Din

Anfang1:
     Cmd(0) = &H41
     Cmd(1) = 0
     Cmd(2) = 0
     Cmd(3) = 0
     Cmd(4) = 0
     Cmd(5) = &HFF
     For A = 0 To 5
    ShiftOut Cmd(a)
  Next

    Dout = &HFF
  ShiftOut Dout

     din=ShiftIn
     If Din <> 0 Then
        GoTo Anfang1
     End If
     Print Din

     Set Mcs
End Sub

Sub Mmc_write()
    Set Mcs

     cmd(0)=&h58
  cmd(1)=0
  cmd(2)=0
  cmd(3)=0
  cmd(4)=0
  cmd(5)=&hff

  Sector= Shift(Left,9,Sector)

  tmp=Sector & &hff000000
  cmd(1)=Shift(Right,24,tmp)

  tmp=Sector & &h00ff0000
  cmd(2)=Shift(Right,16,tmp)

  tmp=Sector & &h0000ff00
  cmd(3)=Shift(Right,8,tmp)

Anfang2:
     Reset Mcs
     For A = 0 To 5
        ShiftOut Cmd(a)
     Next

     Dout = &HFF
  ShiftOut Dout

     din=ShiftIn
     If Din <> 0 Then
        GoTo Anfang2
     End If
     Print Din

    Dout = &HFF
  ShiftOut Dout

     For A = 0 To 514
        Dout = Buffer(a)
        ShiftOut Dout
     Next

     WaitUs 10
     din=ShiftIn
     Print Din

    Dout = &HFF
  ShiftOut Dout

     Set Mcs
End Sub

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
Noch kein Account? Hier anmelden.