Пожалуйста помогите.
Ни как не могу записать данные на SD Card и MMC.
Инициализация и чтение работают нормально, а вот запись не получается.
При записи карта выдаёт ответ об удачной записи, однако реально данные не записываются, т.е. содержимое памяти не изменятеся.
Даже когда я заблокировал SD Card от записи, передвинув защёлку, карта всё равно выдала ответ об удачной записи, но как и в другом случае, память не была модифицирована.
защита от записи реализуется в своей программе (в коннекторе контакт замыкается когда язычек передвинут).
а в самой ММС или СД ничего нет тока пластмасска.
вот я тож хотел соеденить диспл от s65 и ММС, только вот массив картинки получаеться, а как его записать напрямую в блоки через кардридер на ПК незнаю?
через кардридер без использования FAT никак не получится.. если только Вы не напишете драйвер который будет работать с кард-ридером напрямую как с железкой,минуя драйвера винды. ИМХО
Народ делает на меге софт USB и через этот девайс пишет карты.но опять же нужно дрова и софт для этого девайса.
Не лучше ли сделать так. организовать минимальные функции по работе с FAT(инициализация,поиск и чтение файла) и писать файлы в виде массива байт(или слов если у вас 16 бит режим). в этом случаем можно файл получаемый на выходе конвертора (h или bin или с файл) писать как есть на карту.
Привет всем! Мучаю мегу 16 с диспом от s65. Если у кого всё получилось, если можете выложите, пожалуйста, библиотеки/исходники под CodeVisionAVR для работы с FAT-ом. Уже несколько дней роюсь в бескрайних просторах, но никак не могу найти логически завершённой информации.
И ещё несколько интересующих вопросов: что имеется в виду, когда в опциях форматирования WinXP на выбор даётся FAT и FAT32 (что такое FAT - это FAT12 или FAT16?), что подразумевает фраза "размер кластера стандартный" (это сколько?), чем отличается организация карты отформатированной виндами и допустим мобилкой, размер блока 512+2 байт стандартный для всех SD карт или допустим с 16МБ и 2 ГБ картами работать придётся по разным алгоритмам? Извиняюсь за не скромный вопрос с SDHC кто-нибудь уже пробовал общаться?
"как его записать напрямую в блоки через кардридер на ПК"
самое простое
# dd if=image.bmp of=/dev/mmcblk0
можно еще пошаманить с параметрами и т.п. но чтобы залить на карту памяти картинку в формате bmp без файловой системы лучше вряд ли что-то есть. Кстати, dd вроде и под винду есть.
Упс. Извиняюсь за некрофилию, не посмотрел на дату.
1. новые карты не поддерживают MMC
2. новые карты (от 4 гб и выше) иначи запускаются
все примеры в сети - для старых карт, до 128 мб
моя на 16 мб пишется и читается посекторно
а вот на 1 гб уже только читается
на 4 и выше даже не отвечает
start:
_data 0xff;чтение
ldi temp,spdr;сохраняем число в TEMP
rjmp start;
Обьясните на счет,приема данных после отправки команд,я их вижу в ПРОТЕУСЕ после отправки
_data 0xff;
_data 0xff;
а вот считывание,байтов неполучается.
И главное обьясните КАК читать командой cmd17 куда что записывать(адресс в какой байт после команды)?
внизу картинка на ней осцилограмма работы с картой,если у когонить есть работа с MMC в асемблере скинте.
спящий писал(а):Вопрос наконецто у меня проходит CMD0,CMD1 а вот при чтении карты ошибка постоянно выводит FF,в чем причина может я неправильно активировал?
Если ответило на CMD0/1 - значит активировал.
Для SD нужно ещё выдавать APP_CMD и SEND_OP_COND_FOR_SD, а для SDHC - SEND_IF_COND.
Причем, это выдается после GO_IDLE_STATE, но до SEND_OP_COND_FOR_MMC
Хм, у меня более сложное "будилово" карточки, с учетом всех типов. Расскажи какую карточку пытаешь MMC / SD / SDHC? Каждую надо будить по своему и определять что за чудо в разъём поставили
Ты хочешь прочитать сколько-то байт в секторе 0, со смещения 16?
Для 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.
использую mikroSD на 1 гб,сейчас сделал через переходник(адаптер) - неработает обратно вернул тоже(CMD0 выдает 0) -может быть неправильно активировал,нужно было через ACMD,посоветуйте где можно прочитать или взять даташит?
а вот вы писали READ_SINGLE_BLOCK это имеется ввиду CMD или уже с библиотеке? то что я записал файл на карточку через телефон - невыйдет боком(картридера нет) и последний вопрос
спящий писал(а):использую mikroSD на 1 гб,сейчас сделал через переходник(адаптер) - неработает обратно вернул тоже(CMD0 выдает 0) -может быть неправильно активировал,нужно было через ACMD,
Я самой первой командой подаю GO_IDLE_STATE, т.е. CMD0. Перед этим выдаю 10 байт 0xFF БЕЗ сигнала CS (CS=1). Т.е. даю 80 тактовых импульсов, чтоб карточка очухалась.
спящий писал(а):посоветуйте где можно прочитать или взять даташит?
Я гуглил по всему инету, так что сейчас не скажу даже где взять. В этих инетах нашел и сырцы библиотек под SD. Тока не под AVR, хотя мне не под неё и нужно было
Поищи в направлении ucLinux под Blackfin - там вполне понятно было, можно разобраться.
спящий писал(а):а вот вы писали READ_SINGLE_BLOCK это имеется ввиду CMD или уже с библиотеке?
Это название команды, из доков. Это CMD17
спящий писал(а):то что я записал файл на карточку через телефон - невыйдет боком(картридера нет)
Карточке пофиг кто и как пишет на неё
спящий писал(а)://CMD17 чтение байтов
data(0x51);
data(0x00);
data(0x00);
data(0x00);
data(0x10);
data(0x95);
куда что нужно вписать(сектора?) читал нефига неразобрался.
В доке нарисовано же. После байта команды 4 байта аргумента, а данном случае адрес 1-го байта чтения от начала карточки. Записывается, начиная со старшего байта.
Типа такого:
Карточка начала отвечать,но где найти мне мои 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);
спящий писал(а):Карточка начала отвечать,но где найти мне мои 123456789(a.txt)? как их прочитать?
Где-где содержимое файла, в кластере! А на кластер указывает описатель файла, а описатель файла лежит в кластере каталога... Короче говоря, ещё тот Кащей Бессмертный получается
спящий писал(а):Попытался схетрить непрерывно начал читать (года найдет 0x31 =1 начнет выдавать на экран) и вот что вышло)
Ещё бы, ты неправильно читаешь.
спящий писал(а):или чтобы найти файл надо изучать FAT,то подскажите с какой ссылки начать?
Вот он какой - бан в Гугле, суровый и беспощадный.
Я только что вбил в Яндексе "работа с mmc картой" и оно выдало КУЧУ интересных ссылок, аж целых 7 млн. Там и примеры работы с картой, и ссылки на даташиты по картам. И описание FAT, даже на русском....
спящий писал(а):И чтобы окончательно определиться,я правильно понимаю:
data(0x52);
data(0x00);
data(0x00);
data(0x00);
data(0x01); это читаем первый сектор
data(0x95);
Конечно НЕТ. Я говорил уже : Для MMC/SD карт размером до 4 Гиг в команды записи/чтения передается адрес в байтах. Т.е. номер сектора умножаем на 512.
Да, и после команды чтения сектора обязательно вычитать ВЕСЬ сектор (т.е. 512 + 2 байта).