Цитата(torik @ Sep 16 2008, 11:53)

А SD-карточку проще? Как с ней вообще работать-то?
С сд картой конечно же проще. Работать с ней через SPI интерфес, если нужно могу скинуть исходники работы с картой на PIC'е
Чегото на пик найти немогу вот мой вариант работы на авр с карточкой MMC
CODE
.device AT90S2313
;***** I/O Register Definitions
.equ SREG =$3f
.equ SPL =$3d
.equ GIMSK =$3b
.equ GIFR =$3a
.equ TIMSK =$39
.equ TIFR =$38
.equ MCUCR =$35
.equ TCCR0 =$33
.equ TCNT0 =$32
.equ TCCR1A =$2f
.equ TCCR1B =$2e
.equ TCNT1H =$2d
.equ TCNT1L =$2c
.equ OCR1AH =$2b
.equ OCR1AL =$2a
.equ ICR1H =$25
.equ ICR1L =$24
.equ WDTCR =$21
.equ EEAR =$1e
.equ EEARL =$1e
.equ EEDR =$1d
.equ EECR =$1c
.equ PORTB =$18
.equ DDRB =$17
.equ PINB =$16
.equ PORTD =$12
.equ DDRD =$11
.equ PIND =$10
.def temp = r16
.def byte = r17
.def byte_read = r18
.def arg0 = r19
.def arg1 = r20
.def arg2 = r21
.def arg3 = r22
.def crc7 = r23
.def errmmc = r23
.def cmd = r24
.equ clk =0
.equ do =2
.equ di =1
.equ cs =3
.cseg ; CODE segment.
.org 0
rjmp init ;Reset
reti ;INT 0
reti ;Pin Change
reti ;Output compare
reti ;Timer 1
reti ;Timer 0
reti ;EEPROM ready
reti ;Analog Comparator
;Main Routine
init:
ldi r16, $DF
out SPL, r16
rcall PORT_SETUP
rcall MMC_RESSET
ldi cmd, 16
ldi arg0, $0
ldi arg1, $0
ldi arg2, $02
ldi arg3, $0
ser crc7
rcall MMC_CMD
rcall MMC_CLK_FF
ldi cmd, 17
clr arg0
clr arg1
ldi arg2, $02
clr arg3
ser crc7
rcall MMC_CMD
rcall MMC_CLK_FF
rcall MMC_CLK_FF
cpi byte_read, $fe
brne end_er
ldi temp, 0
READMMC:
rcall SPI_SEND_FF
dec temp
brne READMMC
READMMC_1:
rcall SPI_SEND_FF
dec temp
brne READMMC_1
; rcall MMC_CLK_FF
;
; ldi cmd, 16
; ldi arg0, $0
; ldi arg1, $0
; ldi arg2, $02
; ldi arg3, $0
; ser crc7
; rcall MMC_CMD
;
; rcall MMC_CLK_FF
;
; ldi cmd, 24
; ldi arg0, $0
; ldi arg1, $0
; ldi arg2, $0
; ldi arg3, $0
; ser crc7
; rcall MMC_CMD
; rcall MMC_CLK_FF
; cpi byte_read, $FF
; breq end_er
;
; rcall SPI_SEND_FF
; rcall SPI_SEND_FF
; ldi byte, $FE
; rcall SPI_SEND
;
; clr temp
; clr byte
;MET:
; rcall SPI_SEND
; inc byte
; dec temp
; brne MET
;
; clr temp
;MET1:
; rcall SPI_SEND
; inc byte
; dec temp
; brne MET1
;
; rcall MMC_CLK_FF
; rcall MMC_CLK_FF
; andi byte_read, $1F
;
; out PORTB, byte_read
LOOP:
rjmp LOOP
end_er:
sbi PORTB, 0
rjmp end_er
end_OK:
sbi PORTB, 7
rjmp end_OK
PORT_SETUP:
push r16
clr r16
out PORTD, r16
out PORTB, r16
out DDRB, r16
ldi r16, $0D
out DDRD, r16
pop r16
ret
MMC_CMD:
push temp
push byte
mov byte, cmd
ori byte, $40
rcall SPI_SEND
mov byte, arg0
rcall SPI_SEND
mov byte, arg1
rcall SPI_SEND
mov byte, arg2
rcall SPI_SEND
mov byte, arg3
rcall SPI_SEND
mov byte, crc7
rcall SPI_SEND
pop byte
pop temp
ret
MMC_CLK_FF:
push temp
ldi temp, $FF
rjmp MMC_CLK_1
MMC_CLK:
push temp
ldi temp, $10
MMC_CLK_1:
rcall SPI_SEND_FF
cpi byte_read, $FF
brne MMC_CLk_2
dec temp
brne MMC_CLk_1
MMC_CLK_2:
pop temp
ret
MMC_RESSET:
push byte
push temp
rcall SPI_CS_1
ldi temp, $10
MMC_RESSET_1:
rcall SPI_SEND_FF
dec temp
brne MMC_RESSET_1
rcall SPI_CS_0
ldi cmd, 0
clr arg0
clr arg1
clr arg2
clr arg3
ldi crc7, $95
rcall MMC_CMD
ldi temp, $10
MMC_RESSET_2:
rcall SPI_SEND_FF
cpi byte_read, $FF
brne MMC_RESSET_3
dec temp
brne MMC_RESSET_2
ldi temp, $FF
MMC_RESSET_3:
dec temp
breq MMC_RESSET_4
ldi cmd, 1
clr arg0
clr arg1
clr arg2
clr arg3
ser crc7
rcall MMC_CMD
rcall MMC_CLK_FF
cpi byte_read, $00
brne MMC_RESSET_3
MMC_RESSET_4:
; rcall MMC_CLK
pop temp
pop byte
ret
SPI_SEND_FF:
push r16
push byte
ldi r16, $08
ldi byte, $FF
rjmp SPI_SEND_1
SPI_SEND:
push r16
push byte
ldi r16, $08
SPI_SEND_1:
cbi PORTD, clk
cbi PORTD, do
sbrc byte, 7
sbi PORTD, do
sbi PORTD, clk
rol byte
lsl byte_read
sbic PIND, di
ori byte_read, 1
dec r16
brne SPI_SEND_1
cbi PORTD, clk
sbi PORTD, do
pop byte
pop r16
ret
SPI_CS_0:
cbi PORTD, cs
ret
SPI_CS_1:
sbi PORTD, cs
ret