Перейти к содержанию
    

Есть SD Card спецификация

извиняюсь за поднятие старого-старого поста

 

есть какая то PC утилита по низкоуровневому считываю OCR CID SCR CSD c sd-карты ? ( желательно с приведением в человекопонятный вид )

 

а то часть карт не работает на железке с LPC1778. Хочется разобраться почему.

 

Не работает даже на свежем софте Nemui Trinomius для LPC1788 ( портировал на свое железо вроде верно )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ее нет и быть не может, т.к. вся низкоуровневость закрыта в контроллере считывателя. Наверху только mass storage протокол, в котором нет низкоуровневых команд. Так что разбирайтесь на железке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ее нет и быть не может, т.к. вся низкоуровневость закрыта в контроллере считывателя

 

1. хм, я предположил про возможность, из-за того что в регистре CSD есть пару бит на запись для идентификации FILE_FORMAT.

Но как понял, запись однократная и формируется у изготовителя

 

А онлайн-парсеров нет ? А то вот накропал на MSVC, если народу требуется то могу онлайн-конвертилк выложить

 

2. разобрался, все примеры исходников в инете содержат одну и ту же ошибку - включают WIDEBUS не по анализу битов SCR:BUS_WIDTHS

а по ответу OCR ( где вообще только диапазон питающих напряжений и статус работы )

 

доказательства:

исходник чана для LPC23xx ( странно что результат получается что ACMD6 проходит успешно, в выходные поразбираюсь детальнее )

{
...
}
while (!send_cmd(ACMD41, 0x40FF8000, 1, resp) || !(resp[0] & 0x80000000));
ty = (resp[0] & 0x40000000) ? CT_SD2|CT_BLOCK : CT_SD2;

    if (ty & CT_SDC) {        /* Set wide bus mode (for SDCs) */
        if (!send_cmd(ACMD6, 2, 1, resp)    /* Set wide bus mode of SDC */
            || (resp[0] & 0xFDF90000))
            goto di_fail;
        MCI_CLOCK |= 0x800;                // Set wide bus mode of MCI

 

Nemuisan LPC1788_EA_BareMetal_FatFs_20160331

    if (pCardInfo->card_type & CARD_TYPE_SD) {

        Chip_SDC_ClockControl(pSDC, SDC_CLOCK_WIDEBUS_MODE, ENABLE);
        Ret = setBusWidth(pSDC, pCardInfo->rca, ACMD6_BUS_WIDTH_4);
        if (Ret != SDC_RET_OK) {

 

даже в стандарте пишут:

Note that Low-Speed SDIO cards support 4-bit transfer as an option. When communicating with a Low-Speed

SDIO card, the host shall first determine if the card supports 4-bit transfer prior to attempting to select that mode.

 

осталось разобраться, почему ACMD6 успешно проходит, если в принципе не поддерживается режим.

 

p.s. Кстати, в исходниках тоже не видел такого, что пишут в стандарте

If a Combo card supports the lock/unlock operation, it cannot change bus width of a locked card and returns an illegal command error to a bus width switch command.

The host needs to unlock the card by CMD42 before changing bus width

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...