geschafft : mmc-karte zu fuss mit bascom proggen...hurra
es ist geschafft. die mmc-karte kann ich jetzt zu fuss proggen mit bascom, nur über "shiftout-befehl" und "shiftin-befehl" sectoren beschreiben.
das auslesen geht genauso einfach. kann jeder selbst ergänzen.
bei mir laufen damit 4 verschiedene mmc/sd-karten.
hier der code :
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200
Declare Sub Mc_init()
Declare Sub Mc_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
Mcs Alias Portb.0
Mosi Alias Portb.1
Miso Alias Pinb.2
Sck Alias Portb.3
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Input
Config Pinb.3 = Output
Waitms 255
Sector = 0
Buffer(1) = &HFE
Buffer(514) = &HFF
Buffer(515) = &HFF
For A = 2 To 513
Buffer(a) = 71
Next
Call Mc_init()
Call Mc_write()
End
Sub Mc_init()
Set Mcs
Dout = &HFF
For A = 0 To 10
Shiftout Mosi , Sck , Dout , 1 , 8 , 16
Next
Anfang:
Reset Mcs
Cmd(1) = &H40
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &H95
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
Next
For A = 1 To 8
Reset Sck
Waitus 10
Set Sck
Waitus 10
Next
:
Shiftin Miso , Sck , Din , 1 , 8 , 16
If Din <> 1 Then
Goto Anfang
End If
Print Din
Anfang1:
Reset Mcs
Cmd(1) = &H41
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &HFF
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
Next
For A = 1 To 8
Reset Sck
Waitus 10
Set Sck
Waitus 10
Next
Shiftin Miso , Sck , Din , 1 , 8 , 16
If Din <> 0 Then
Goto Anfang1
End If
Print Din
Set Mcs
End Sub
Sub Mc_write()
Set Mcs
Cmd(1) = &H58
Cmd(2) = 0
Cmd(3) = 0
Cmd(4) = 0
Cmd(5) = 0
Cmd(6) = &HFF
Shift Sector , Left , 9
Tmp = Sector And &HFF000000
Shift Tmp , Right , 24
Cmd(2) = Tmp
Tmp = Sector And &H00FF0000
Shift Tmp , Right , 16
Cmd(3) = Tmp
Tmp = Sector And &H0000FF00
Shift Tmp , Right , 8
Cmd(4) = Tmp
Anfang2:
Reset Mcs
For A = 1 To 6
Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 16
Next
For A = 1 To 8
Reset Sck
Waitus 10
Set Sck
Waitus 10
Next
Shiftin Miso , Sck , Din , 1 , 8 , 16
If Din <> 0 Then
Goto Anfang2
End If
Print Din
For A = 1 To 8
Reset Sck
Waitus 10
Set Sck
Waitus 10
Next
For A = 1 To 515
Dout = Buffer(a)
Shiftout Mosi , Sck , Dout , 1 , 8 , 16
Waitus 10
Next
Waitus 10
Shiftin Miso , Sck , Din , 1 , 8 , 16
Print Din
For A = 1 To 8
Reset Sck
Waitus 10
Set Sck
Waitus 10
Next
Set Mcs
End Sub