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