у меня заработало только после добавления _delay_ms(6); в цикл ожидания функции SD_Init(void) экспериментальным путем я понял, что ответ ноль от карты МК получает только с третьего раза. задержка в 5мс уже не срабатывает. первые два обращения к карте завершаются ответом 1. и на третьем обращении карта выдает 0. КАРТУ СПЕЦИАЛЬНО КУПИЛ на Али размером в 32МБ. При использовании карты в 16 Гб и более - ответ всегда ЕДИНИЦА.
Спасибо за ваши уроки. По поводу кода в функции unsigned char SD_init(void), не совсем понял зачем после "if(temp != 0x01) return 1;" нам нужна линия SPI_SendByte(0xFF); ? Спасибо.
Тоже не понял этого. Более того, по даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Вместо этого автор сразу после команды CMD0 отправляет команду CMD41. Как после этого у него хоть что-то работает мне абсолютно не понятно. У меня заработало только после того как сделал всё по даташиту.
@@oxygen8680 Хотел отправить код инициализации и решил еще раз проверить его на реальной флешке. Не работает. Пол года назад на другой флешке работал, а куда я дел ту флешку уже и не помню. Другую флешку вставил - не работает.
У меня то же самое. Определяет наличие карты по команде CMD0, а потом у автора идет команда CMD41, которая сразу после CMD0 не работает. По даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Как у автора хоть что-то работает мне абсолютно не понятно. У меня заработало только после того как сделал всё по даташиту.
Владимир меня интересует функция unsigned char SPI_ReceiveByte(void), то что в ней написано понимаю. Но мне не понятно одно. Контролер на 19 ножке ждет импульсы с SD для того, что бы сформировать байт. Мы этой командой PORTB |= (1
Копайте в сторону инициализации. У автора она сделана не правильно. Может для каких-то старинных флешек на 32 мегабайта этот код и работает, но современные с ним работать не хотят. По даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Вместо этого автор сразу после команды CMD0 отправляет команду CMD41. У меня заработало только после того как сделал всё по даташиту.
Спасибо!
Вчера я понадеялся на вас но добавил
Интересный урок! нормуль!
у меня заработало только после добавления _delay_ms(6); в цикл ожидания функции SD_Init(void)
экспериментальным путем я понял, что ответ ноль от карты МК получает только с третьего раза. задержка в 5мс уже не срабатывает. первые два обращения к карте завершаются ответом 1. и на третьем обращении карта выдает 0. КАРТУ СПЕЦИАЛЬНО КУПИЛ на Али размером в 32МБ. При использовании карты в 16 Гб и более - ответ всегда ЕДИНИЦА.
Спасибо за ваши уроки.
По поводу кода в функции unsigned char SD_init(void),
не совсем понял зачем после "if(temp != 0x01) return 1;" нам нужна линия SPI_SendByte(0xFF); ?
Спасибо.
Тоже не понял этого. Более того, по даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Вместо этого автор сразу после команды CMD0 отправляет команду CMD41. Как после этого у него хоть что-то работает мне абсолютно не понятно. У меня заработало только после того как сделал всё по даташиту.
@@Pr0grammer04 если не сложно, скинь код инициализации SD, а то что-то не врубаюсь
@@oxygen8680 Хотел отправить код инициализации и решил еще раз проверить его на реальной флешке. Не работает. Пол года назад на другой флешке работал, а куда я дел ту флешку уже и не помню. Другую флешку вставил - не работает.
Спасибо большое!
Есть вопрос: если карты нет - правильно работает: возвращает "1", а если карту вставить - выдает "2".
Что у меня может быть не так?
У меня то же самое. Определяет наличие карты по команде CMD0, а потом у автора идет команда CMD41, которая сразу после CMD0 не работает. По даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Как у автора хоть что-то работает мне абсолютно не понятно. У меня заработало только после того как сделал всё по даташиту.
Владимир меня интересует функция unsigned char SPI_ReceiveByte(void), то что в ней написано понимаю. Но мне не понятно одно. Контролер на 19 ножке ждет импульсы с SD для того, что бы сформировать байт. Мы этой командой PORTB |= (1
Лайк 👍👍👍10
Мне необходимо использовать 16 Mhz по данному примеру карта не инициализируется,
Подскажите куда копать?
Копайте в сторону инициализации. У автора она сделана не правильно. Может для каких-то старинных флешек на 32 мегабайта этот код и работает, но современные с ним работать не хотят. По даташиту на 18:20 ясно видно, что после CMD0 должна идти команда CMD8, а затем команда ACMD41. Вместо этого автор сразу после команды CMD0 отправляет команду CMD41. У меня заработало только после того как сделал всё по даташиту.
Автор не шарит. Расходимся и читаем даташит
Ну да, а заодно и правила этикета.