sector 1 wird nur beschrieben obwohl ich die 3 angebe

Gast #762312
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren