AVR + MMC не могу соединить
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
Пожалуйста помогите.
Ни как не могу записать данные на SD Card и MMC.
Инициализация и чтение работают нормально, а вот запись не получается.
При записи карта выдаёт ответ об удачной записи, однако реально данные не записываются, т.е. содержимое памяти не изменятеся.
Даже когда я заблокировал SD Card от записи, передвинув защёлку, карта всё равно выдала ответ об удачной записи, но как и в другом случае, память не была модифицирована.
Инфу брал отсюда:
http://piclist.ru/S-64MMC-PIC-RUS/S-64MMC-PIC-RUS.html
См. исходники моей тестовой проги
Команда о записи передаётся через USART.
Вызывается подпрограмма USART_COMMAND_MMC_WRITE, которая вызывает подпрограмму MMC_Write.
Ни как не могу записать данные на SD Card и MMC.
Инициализация и чтение работают нормально, а вот запись не получается.
При записи карта выдаёт ответ об удачной записи, однако реально данные не записываются, т.е. содержимое памяти не изменятеся.
Даже когда я заблокировал SD Card от записи, передвинув защёлку, карта всё равно выдала ответ об удачной записи, но как и в другом случае, память не была модифицирована.
Инфу брал отсюда:
http://piclist.ru/S-64MMC-PIC-RUS/S-64MMC-PIC-RUS.html
См. исходники моей тестовой проги
Команда о записи передаётся через USART.
Вызывается подпрограмма USART_COMMAND_MMC_WRITE, которая вызывает подпрограмму MMC_Write.
- Вложения
-
- spi_test.rar
- (43.24 КБ) 456 скачиваний
- Реклама
-
pirotehnick
- Потрогал лапой паяльник
- Сообщения: 327
- Зарегистрирован: Пт фев 08, 2008 13:46:03
- Откуда: Воронеж
- Контактная информация:
- Реклама
- Antibiotic
- Открыл глаза
- Сообщения: 70
- Зарегистрирован: Пт авг 01, 2008 08:43:08
через кардридер без использования FAT никак не получится.. если только Вы не напишете драйвер который будет работать с кард-ридером напрямую как с железкой,минуя драйвера винды. ИМХО
Народ делает на меге софт USB и через этот девайс пишет карты.но опять же нужно дрова и софт для этого девайса.
Не лучше ли сделать так. организовать минимальные функции по работе с FAT(инициализация,поиск и чтение файла) и писать файлы в виде массива байт(или слов если у вас 16 бит режим). в этом случаем можно файл получаемый на выходе конвертора (h или bin или с файл) писать как есть на карту.
Народ делает на меге софт USB и через этот девайс пишет карты.но опять же нужно дрова и софт для этого девайса.
Не лучше ли сделать так. организовать минимальные функции по работе с FAT(инициализация,поиск и чтение файла) и писать файлы в виде массива байт(или слов если у вас 16 бит режим). в этом случаем можно файл получаемый на выходе конвертора (h или bin или с файл) писать как есть на карту.
- Вложения
-
- mmc.c
- набор функций для работы с картой SD/MMC
- (7.35 КБ) 635 скачиваний
Re: AVR + MMC не могу соединить
Привет всем! Мучаю мегу 16 с диспом от s65. Если у кого всё получилось, если можете выложите, пожалуйста, библиотеки/исходники под CodeVisionAVR для работы с FAT-ом. Уже несколько дней роюсь в бескрайних просторах, но никак не могу найти логически завершённой информации.
Re: AVR + MMC не могу соединить
И ещё несколько интересующих вопросов: что имеется в виду, когда в опциях форматирования WinXP на выбор даётся FAT и FAT32 (что такое FAT - это FAT12 или FAT16?), что подразумевает фраза "размер кластера стандартный" (это сколько?), чем отличается организация карты отформатированной виндами и допустим мобилкой, размер блока 512+2 байт стандартный для всех SD карт или допустим с 16МБ и 2 ГБ картами работать придётся по разным алгоритмам? Извиняюсь за не скромный вопрос с SDHC кто-нибудь уже пробовал общаться?
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: AVR + MMC не могу соединить
"как его записать напрямую в блоки через кардридер на ПК"
самое простое
# dd if=image.bmp of=/dev/mmcblk0
можно еще пошаманить с параметрами и т.п. но чтобы залить на карту памяти картинку в формате bmp без файловой системы лучше вряд ли что-то есть. Кстати, dd вроде и под винду есть.
Упс. Извиняюсь за некрофилию, не посмотрел на дату.
самое простое
# dd if=image.bmp of=/dev/mmcblk0
можно еще пошаманить с параметрами и т.п. но чтобы залить на карту памяти картинку в формате bmp без файловой системы лучше вряд ли что-то есть. Кстати, dd вроде и под винду есть.
Упс. Извиняюсь за некрофилию, не посмотрел на дату.
Re: AVR + MMC не могу соединить
Всем добрый! Подскажите почему я не получаю ответа от CMD0?
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.macro _data ; передача по ISP
ldi temp,@0;
out spdr,temp;
cikl: ;ожидание передачи
in temp,SPSR;
sbrs temp,SPIF;
rjmp cikl;
.endMACRO
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
rjmp init;
zapoln:
ldi delay,0x45;ПРОСТО ЗАДЕРЖКА
ldi delay1,0x02;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
init:
;делаем 75 сигналов на CSK
ldi temp,0b00010000;вырубаем ISP
out spcr,temp;
sbi portB,2;DS = 0
sbi portB,3;DI = 0
clr temp;
viderjka:
sbi portB,5;
nop;
nop;
cbi portB,5
inc temp;
cpi temp,80;
brne viderjka;
;ресерт CMD0
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
cbi portB,2;CS=0
_data 0x40
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x95;
proverka:
ldi temp,spdr;
cpi temp,1;
brne proverka;
nop;
;инициализация CMD1
cbi portB,2;CS=0
_data 0x41;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x95;
proverka1:
ldi temp,spdr;
cpi temp,0;
brne proverka1;
start:
nop;
rjmp start;
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.macro _data ; передача по ISP
ldi temp,@0;
out spdr,temp;
cikl: ;ожидание передачи
in temp,SPSR;
sbrs temp,SPIF;
rjmp cikl;
.endMACRO
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
rjmp init;
zapoln:
ldi delay,0x45;ПРОСТО ЗАДЕРЖКА
ldi delay1,0x02;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
init:
;делаем 75 сигналов на CSK
ldi temp,0b00010000;вырубаем ISP
out spcr,temp;
sbi portB,2;DS = 0
sbi portB,3;DI = 0
clr temp;
viderjka:
sbi portB,5;
nop;
nop;
cbi portB,5
inc temp;
cpi temp,80;
brne viderjka;
;ресерт CMD0
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
cbi portB,2;CS=0
_data 0x40
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x95;
proverka:
ldi temp,spdr;
cpi temp,1;
brne proverka;
nop;
;инициализация CMD1
cbi portB,2;CS=0
_data 0x41;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x95;
proverka1:
ldi temp,spdr;
cpi temp,0;
brne proverka1;
start:
nop;
rjmp start;
- Вложения
-
- MMC2.rar
- (19.04 КБ) 199 скачиваний
-
- risunok.GIF
- (7.58 КБ) 589 скачиваний
-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: AVR + MMC не могу соединить
1. новые карты не поддерживают MMC
2. новые карты (от 4 гб и выше) иначи запускаются
все примеры в сети - для старых карт, до 128 мб
моя на 16 мб пишется и читается посекторно
а вот на 1 гб уже только читается
на 4 и выше даже не отвечает
2. новые карты (от 4 гб и выше) иначи запускаются
все примеры в сети - для старых карт, до 128 мб
моя на 16 мб пишется и читается посекторно
а вот на 1 гб уже только читается
на 4 и выше даже не отвечает
Re: AVR + MMC не могу соединить
Подскажите правильно я мыслю:
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.macro _data ; передача по ISP
ldi temp,@0;
out spdr,temp;
cikl: ;ожидание передачи
in temp,SPSR;
sbrs temp,SPIF;
rjmp cikl;
.endMACRO
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
rjmp init;
zapoln:
ldi delay,0x45;
ldi delay1,0x02;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
init:
;делаем 75 сигналов на CSK
ldi temp,0b00010000;вырубаем ISP
out spcr,temp;
sbi portB,2;DS = 0
sbi portB,3;DI = 0
clr temp;
viderjka:
sbi portB,5;
nop;
nop;
cbi portB,5
inc temp;
cpi temp,80;
brne viderjka;
;ресерт CMD0
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
cbi portB,2;CS=0
_data 0x40;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
nop;
;инициализация CMD1
cbi portB,2;CS=0
_data 0x41;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
RCALL ZAPOLN
;cmd17
_data 0x52;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x10;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
start:
_data 0xff;чтение
ldi temp,spdr;сохраняем число в TEMP
rjmp start;
Обьясните на счет,приема данных после отправки команд,я их вижу в ПРОТЕУСЕ после отправки
_data 0xff;
_data 0xff;
а вот считывание,байтов неполучается.
И главное обьясните КАК читать командой cmd17 куда что записывать(адресс в какой байт после команды)?
внизу картинка на ней осцилограмма работы с картой,если у когонить есть работа с MMC в асемблере скинте.
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc"
.list
.nolist
.LISTMAC
.def temp = r16;
.def data = r17;
.def delay = r18;
.def delay1 = r19;
.def DC = R20;
.macro _data ; передача по ISP
ldi temp,@0;
out spdr,temp;
cikl: ;ожидание передачи
in temp,SPSR;
sbrs temp,SPIF;
rjmp cikl;
.endMACRO
ldi r16,high(RAMEND) ;
out SPH,r16 ;
ldi r16,low(RAMEND) ;
out SPL,r16 ;
ser temp;
out DDRB,temp;
out DDRD,temp;
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
rjmp init;
zapoln:
ldi delay,0x45;
ldi delay1,0x02;
loop:
subi delay,1;
sbci delay1,0;
brcc loop;
ret
init:
;делаем 75 сигналов на CSK
ldi temp,0b00010000;вырубаем ISP
out spcr,temp;
sbi portB,2;DS = 0
sbi portB,3;DI = 0
clr temp;
viderjka:
sbi portB,5;
nop;
nop;
cbi portB,5
inc temp;
cpi temp,80;
brne viderjka;
;ресерт CMD0
ldi temp,0b01010000;Активируем ISP
out spcr,temp;
cbi portB,2;CS=0
_data 0x40;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x0;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
nop;
;инициализация CMD1
cbi portB,2;CS=0
_data 0x41;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
RCALL ZAPOLN
;cmd17
_data 0x52;
_data 0x00;
_data 0x00;
_data 0x00;
_data 0x10;
_data 0x95;
_data 0xff;
_data 0xff;
_data 0xff;
_data 0xff;
start:
_data 0xff;чтение
ldi temp,spdr;сохраняем число в TEMP
rjmp start;
Обьясните на счет,приема данных после отправки команд,я их вижу в ПРОТЕУСЕ после отправки
_data 0xff;
_data 0xff;
а вот считывание,байтов неполучается.
И главное обьясните КАК читать командой cmd17 куда что записывать(адресс в какой байт после команды)?
внизу картинка на ней осцилограмма работы с картой,если у когонить есть работа с MMC в асемблере скинте.
- Вложения
-
- Безымянный.GIF
- (9.05 КБ) 601 скачивание
Re: AVR + MMC не могу соединить
Чето непойму,на счет кода CMD17,может ктонибудь обьяснить,где мои цифры 123456789? и какие 2 байта CPC?это FF?
по вертуал терминал выдает:
ø @ €)<0,6 FAT12
или
00 02 00 20 F8 06 00 20 00 40 00 20 00 00 00 00
00 00 00 80 00 29 3C 30 2C 36 20 20 20 20 20 20
20 20 20 20 20 46 41 54 31 32 20 20 20 00 00 00
00 00
где тут мои цифры,и код правильный?
#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>
#include <spi.h>
#define data(x) SPDR=x; while (!( SPSR&(1<<7)));
void main() {
int i,temp;
char array[50] ;
DDRD.2=0;
DDRB=255;
DDRC=255;
// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
//настройка SPI
SPCR=0b01010000;
SPSR=0x00;
//подаем 74 импульса
PORTB.2=1;
PORTB.3=1;
for(i=0;i<80;i++)
{
data(0xff)
}
PORTB.2=0;
delay_ms(1);
//CMD0
data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x01)
{temp= SPDR;
data(0xff)
}
//CMD1
data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x00)
{temp= SPDR;
data(0xff)
}
//CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
while (temp!=0xfe)
{temp= SPDR;
data(0xff);
}
for (i=0;i<50;i++)
{
data(0xff);
array=SPDR ;
}
for (i=0;i<50;i++)
{
putchar(array);
}
}
по вертуал терминал выдает:
ø @ €)<0,6 FAT12
или
00 02 00 20 F8 06 00 20 00 40 00 20 00 00 00 00
00 00 00 80 00 29 3C 30 2C 36 20 20 20 20 20 20
20 20 20 20 20 46 41 54 31 32 20 20 20 00 00 00
00 00
где тут мои цифры,и код правильный?
Спойлер
#define _IO_BITS_DEFINITIONS_#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>
#include <spi.h>
#define data(x) SPDR=x; while (!( SPSR&(1<<7)));
void main() {
int i,temp;
char array[50] ;
DDRD.2=0;
DDRB=255;
DDRC=255;
// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
//настройка SPI
SPCR=0b01010000;
SPSR=0x00;
//подаем 74 импульса
PORTB.2=1;
PORTB.3=1;
for(i=0;i<80;i++)
{
data(0xff)
}
PORTB.2=0;
delay_ms(1);
//CMD0
data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x01)
{temp= SPDR;
data(0xff)
}
//CMD1
data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x00)
{temp= SPDR;
data(0xff)
}
//CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
while (temp!=0xfe)
{temp= SPDR;
data(0xff);
}
for (i=0;i<50;i++)
{
data(0xff);
array=SPDR ;
}
for (i=0;i<50;i++)
{
putchar(array);
}
}
- Вложения
-
- Безымянный.GIF
- (128.81 КБ) 541 скачивание
Re: AVR + MMC не могу соединить
почемуто немогу получить ответ на железе CMD0 ?ответ 00,вместо1.вчем может быть проблема и как ее исправить?
#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>
#include <spi.h>
#define data(x) SPDR=x; while (!( SPSR&(1<<7)));
void main() {
int i,temp;
char array[100] ;
DDRD.2=0;
DDRB=0b11101111;
DDRC=255;
// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
// íàñòðîéêà øèì
TCCR1A=0b10000001;
TCCR1B=0b00001001;
TIMSK1=0b01000000;
//íàñòðîéêà SPI
SPCR=0b01010000;
SPSR=0x00;
//ïîäàåì 74 èìïóëüñà
PORTB.2=1;
PORTB.3=1;
for(i=0;i<80;i++)
{
data(0xff)
}
PORTB.2=0;
delay_ms(1);
//CMD0
data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x01)
{temp= SPDR;
data(0xff);
putchar(SPDR);
}
Спойлер
#define _IO_BITS_DEFINITIONS_#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>
#include <spi.h>
#define data(x) SPDR=x; while (!( SPSR&(1<<7)));
void main() {
int i,temp;
char array[100] ;
DDRD.2=0;
DDRB=0b11101111;
DDRC=255;
// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
// íàñòðîéêà øèì
TCCR1A=0b10000001;
TCCR1B=0b00001001;
TIMSK1=0b01000000;
//íàñòðîéêà SPI
SPCR=0b01010000;
SPSR=0x00;
//ïîäàåì 74 èìïóëüñà
PORTB.2=1;
PORTB.3=1;
for(i=0;i<80;i++)
{
data(0xff)
}
PORTB.2=0;
delay_ms(1);
//CMD0
data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x01)
{temp= SPDR;
data(0xff);
putchar(SPDR);
}
Re: AVR + MMC не могу соединить
Вопрос наконецто у меня проходит CMD0,CMD1 а вот при чтении карты ошибка постоянно выводит FF,в чем причина может я неправильно активировал?
Re: AVR + MMC не могу соединить
Если ответило на CMD0/1 - значит активировал.спящий писал(а):Вопрос наконецто у меня проходит CMD0,CMD1 а вот при чтении карты ошибка постоянно выводит FF,в чем причина может я неправильно активировал?
Для SD нужно ещё выдавать APP_CMD и SEND_OP_COND_FOR_SD, а для SDHC - SEND_IF_COND.
Причем, это выдается после GO_IDLE_STATE, но до SEND_OP_COND_FOR_MMC
Хм, у меня более сложное "будилово" карточки, с учетом всех типов. Расскажи какую карточку пытаешь
По чтению командой READ_SINGLE_BLOCK
Код: Выделить всё
//CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);Для MMC/SD карт размером до 4 Гиг в команды записи/чтения передается адрес с байтах. Т.е. номер сектора умножаем на 512.
После передачи команды READ_SINGLE_BLOCK ждем ответа - читаем SPI, пока не получим ответ (не 0xFF). анализируем ответ .
Если вернуло не START_SBR (0xFE), а вернуло R1_OK (0x00) - снова читаем SPI, пока не будет не 0xFF.
(По докам карта должна ответить R1_OK на команду, а потом выдать START_SBR - мол пошли данные. На практике, некоторые карточки сразу отвечают START_SBR).
А после START_SBR пошли данные и CRC.
Re: AVR + MMC не могу соединить
использую mikroSD на 1 гб,сейчас сделал через переходник(адаптер) - неработает обратно вернул тоже(CMD0 выдает 0) -может быть неправильно активировал,нужно было через ACMD,посоветуйте где можно прочитать или взять даташит?
а вот вы писали READ_SINGLE_BLOCK это имеется ввиду CMD или уже с библиотеке? то что я записал файл на карточку через телефон - невыйдет боком(картридера нет) и последний вопрос
//CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
куда что нужно вписать(сектора?) читал нефига неразобрался.
а вот вы писали READ_SINGLE_BLOCK это имеется ввиду CMD или уже с библиотеке? то что я записал файл на карточку через телефон - невыйдет боком(картридера нет) и последний вопрос
//CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
куда что нужно вписать(сектора?) читал нефига неразобрался.
Re: AVR + MMC не могу соединить
Я самой первой командой подаю GO_IDLE_STATE, т.е. CMD0. Перед этим выдаю 10 байт 0xFF БЕЗ сигнала CS (CS=1). Т.е. даю 80 тактовых импульсов, чтоб карточка очухалась.спящий писал(а):использую mikroSD на 1 гб,сейчас сделал через переходник(адаптер) - неработает обратно вернул тоже(CMD0 выдает 0) -может быть неправильно активировал,нужно было через ACMD,
Я гуглил по всему инету, так что сейчас не скажу даже где взять. В этих инетах нашел и сырцы библиотек под SD. Тока не под AVR, хотя мне не под неё и нужно былоспящий писал(а):посоветуйте где можно прочитать или взять даташит?
Поищи в направлении ucLinux под Blackfin - там вполне понятно было, можно разобраться.
Это название команды, из доков. Это CMD17спящий писал(а):а вот вы писали READ_SINGLE_BLOCK это имеется ввиду CMD или уже с библиотеке?
Карточке пофиг кто и как пишет на неёспящий писал(а):то что я записал файл на карточку через телефон - невыйдет боком(картридера нет)
В доке нарисовано же. После байта команды 4 байта аргумента, а данном случае адрес 1-го байта чтения от начала карточки. Записывается, начиная со старшего байта.спящий писал(а)://CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
куда что нужно вписать(сектора?) читал нефига неразобрался.
Типа такого:
BYTE CDataSD::SendCommandAndWait(BYTE cCommand, UINT nArg, bool bClose)
{
BYTE cSendBuffer[6];
cSendBuffer[0] = 0x40 | cCommand;
cSendBuffer[1] = (nArg >> 24 ) & 0xFF;;
cSendBuffer[2] = (nArg >> 16 ) & 0xFF;
cSendBuffer[3] = (nArg >> 8 ) & 0xFF;
cSendBuffer[4] = nArg & 0xFF;
......
Re: AVR + MMC не могу соединить
Карточка начала отвечать,но где найти мне мои 123456789(a.txt)? как их прочитать?
Попытался схетрить непрерывно начал читать (года найдет 0x31 =1 начнет выдавать на экран) и вот что вышло)
или чтобы найти файл надо изучать FAT,то подскажите с какой ссылки начать?
И чтобы окончательно определиться,я правильно понимаю:
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x01); это читаем первый сектор
data(0x95);
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x10); это читаем 16 сектор
data(0x95);
data(0x52);
data(0x00);
data(0x00);
data(0x01);это читаем 256 сектор
data(0x00);
data(0x95);
Попытался схетрить непрерывно начал читать (года найдет 0x31 =1 начнет выдавать на экран) и вот что вышло)
или чтобы найти файл надо изучать FAT,то подскажите с какой ссылки начать?
И чтобы окончательно определиться,я правильно понимаю:
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x01); это читаем первый сектор
data(0x95);
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x10); это читаем 16 сектор
data(0x95);
data(0x52);
data(0x00);
data(0x00);
data(0x01);это читаем 256 сектор
data(0x00);
data(0x95);
- Вложения
-
- Безымянный.GIF
- (40.4 КБ) 528 скачиваний
Re: AVR + MMC не могу соединить
Где-где содержимое файла, в кластере! А на кластер указывает описатель файла, а описатель файла лежит в кластере каталога... Короче говоря, ещё тот Кащей Бессмертный получаетсяспящий писал(а):Карточка начала отвечать,но где найти мне мои 123456789(a.txt)? как их прочитать?
Ещё бы, ты неправильно читаешь.спящий писал(а):Попытался схетрить непрерывно начал читать (года найдет 0x31 =1 начнет выдавать на экран) и вот что вышло)
Вот он какой - бан в Гугле, суровый и беспощадный.спящий писал(а):или чтобы найти файл надо изучать FAT,то подскажите с какой ссылки начать?
Я только что вбил в Яндексе "работа с mmc картой" и оно выдало КУЧУ интересных ссылок, аж целых 7 млн. Там и примеры работы с картой, и ссылки на даташиты по картам. И описание FAT, даже на русском....
"SD/MMC карта памяти и микроконтроллер AVR (часть 1) Базовые операции." http://avrlab.com/node/156
"Описание алгоритма с примерами для работы с картами SD/MMC" http://www.mindrunway.ru/MSFat.html
"MMC, SD и другие карты памяти" http://www.piclist.ru/mmc.html
"Звонок с MMC/SD картой памяти" http://radiokot.ru/circuit/digital/home/39/
Последняя ссылка показательна - лежит прямо ТУТ
Конечно НЕТ. Я говорил уже : Для MMC/SD карт размером до 4 Гиг в команды записи/чтения передается адрес в байтах. Т.е. номер сектора умножаем на 512.спящий писал(а):И чтобы окончательно определиться,я правильно понимаю:
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x01); это читаем первый сектор
data(0x95);
Да, и после команды чтения сектора обязательно вычитать ВЕСЬ сектор (т.е. 512 + 2 байта).



