Kód: Egész kijelölése
' Sd_routines.bas
' Hiba esetén 10* újra próbálja végrehajtani az adott rutint!
'------------------------------------------------------------------------------
'| ROUTINES FOR SD MICRO CARD
'| Based on kapu48's code: http://avr.tavir.hu/modules.php?name=Forums&file=viewtopic&t=713
'------------------------------------------------------------------------------
Dim UjraP As Byte
Sub Sd_init
Ujrap = 0
Ujra_proba1: ' ERROR esetén 10* megpróbálja újból
Set Sd_csx
Sd_command = &HFF
For Dataword = 1 To 74
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Next Dataword
Sd_data = &HFF
Reset Sd_csx
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Cmd0: ' Send CMD0: &H40 &H00 &H00 &H00 &H00 &H95
Sd_command = &H40
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Sd_addr = &H00000000
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Sd_command = &H95
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Timeout = 0
Timeout_problem = 0
While Sd_data <> &H01
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba1
Else
Goto Errortrap
End If
End If
Wend
Set Sd_csx
Waitms 50
Reset Sd_csx
Sd_command = &HFF
Cmd1: ' Send CMD1: &H41, &H00, &HFF, &HFF '
Timeout = 0
Timeout_problem = 0
While Sd_data <> &H00
Set Sd_csx
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Reset Sd_csx
Sd_command = &H41
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Sd_addr = &H00000000
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba1
Else
Goto Errortrap
End If
End If
Wend
Sd_command = &HFF
Set Sd_csx
Exit Sub
Errortrap:
Timeout_problem = 1
End Sub
'------------------------------------------------------------------------------
Sub Sd_readpic()
Ujrap = 0
Ujra_proba2:
Set Sd_csx
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Reset Sd_csx
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Sd_command = &H51
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Timeout = 0
Timeout_problem = 0
While Sd_data <> 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba2
Else
Goto Errortrap
End If
End If
Wend
Timeout = 0
Timeout_problem = 0
While Sd_data <> &HFE
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba2
Else
Goto Errortrap
End If
End If
Wend
For Dataword = 1 To 512
Shiftin Spi_sdi , Spi_scl , Uni_cntr , 0
Puffer(dataword) = Uni_cntr
Next Dataword
Set Sd_csx
End Sub
'------------------------------------------------------------------------------
Sub Sd_writepic()
Ujrap = 0
Ujra_proba3:
Set Sd_csx
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Reset Sd_csx
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Cmd24:
Sd_command = &H58
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftout Spi_sda , Spi_scl , Sd_addr , 0
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Timeout = 0
Timeout_problem = 0
While Sd_data <> 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba3
Else
Goto Errortrap
End If
End If
Wend
Sd_command = &HFE
Shiftout Spi_sda , Spi_scl , Sd_command , 0
For Dataword = 1 To 512
Serialbyte = Puffer(dataword)
Shiftout Spi_sda , Spi_scl , Serialbyte , 0
Next Dataword
Sd_command = &HFF
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftout Spi_sda , Spi_scl , Sd_command , 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
'Ha Sd_data=229 -> Írás létrejött
'Ha Sd_data=0 -> Kártya foglalt
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Timeout = 0
Timeout_problem = 0
While Sd_data = 0
Shiftin Spi_sdi , Spi_scl , Sd_data , 0
Incr Timeout
If Timeout = 255 Then
Incr Ujrap
If Ujrap < 10 Then
Goto Ujra_proba3
Else
Goto Errortrap
End If
End If
Wend
Set Sd_csx
End Sub
'------------------------------------------------------------------------------