Отговори на тема  [ 13 мнения ] 
Проблем със SDHC карта 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Юни 19, 2019 6:04 pm
Мнения: 9
Мнение Проблем със SDHC карта
Здравейте колеги
Правя библиотека за една сд карта модел SDHC 16ГБ - от новите.Почти запуснах картата - направих инициализацията , четенето на единичен сектор и на мулти сектори , направих и изтриването на сектори и записа на единичен сектор. Остана ми да направя записа на мулти сектори но не ми се получава. Описвам как го правя - подавам команда 25 за запис на мулти сектори , след което чакам отговора на картата , след което за въртам цикъл в който подавам за старт 0xFC и след това 512 байта данни (толкова ми е блока) и накрая два байта 0xFF 0xFF за чек сума като съм изключил предварително проверката на чек сумата. След първи блок картата ми отговаря нормално със 0x05 и 0x00 но на следващите блокове не ще. пак подавам 0xFC и пак 512 байта и пак 2 байта чек сума но повече не отговаря .Въпросът ми е - каква е правилната поредица байтове при записа на мулти сектори на сд картата ?


Сря Юни 19, 2019 6:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10376
Местоположение: Добрич
Мнение Re: Проблем със SDHC карта
Предполагам ползваш SPI интерфейс (за SDIO e различно)...

ей ти малко код:

Код:
      for(int retry=1; retry<20; retry+=2)
      {
          if (count == 1)
          { /* Single block write */
             if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
             && xmit_datablock(buff, 0xFE) == RES_OK)
             {
                count = 0;
                break;
             }
          }
          else
          { /* Multiple block write */
             if (disk_type & DISK_TYPE_SDC)
             {
                send_cmd(CMD55, 0);
                send_cmd(CMD23, count); /* ACMD23 */
             }
             if (send_cmd(CMD25, sector) == 0)
             { /* WRITE_MULTIPLE_BLOCK */
                const void* rbuff = buff;
                int rcount = count;
                do
                {
                   if (xmit_datablock(rbuff, 0xFC) != RES_OK)
                      break;
                   rbuff = ((char*)rbuff) + 512;
                } while (--rcount);
                if (xmit_datablock(0, 0xFD) == RES_OK && !rcount) /* STOP_TRAN token */
                {
                   count = 0;
                   break;
                }
             }
          }

          //reset
         if(card_reset(retry))
            retry--;
      }


В началото имаш 23-та команда... еднократно. Не става ясно правиш ли го, как циклиш, чакаш ли картата също не ми е ясно...
всъщност ето ти и трансфера:

Код:
/**
*
* @param buff      512 byte data block to be transmitted
* @param token      Data/Stop token
* @return
*/
RES_CODE sd_disk_t::xmit_datablock(const void* buff, unsigned int token)
{
   if (!card_ready())
      return RES_ERROR;

   /* Xmit data token */
   hspi.tsk_write_locked(&token, 1);
   if (token != 0xFD)
   { /* Is data token */

      /* Xmit the 512 byte data block to MMC */
      hspi.tsk_write_locked(buff, 512);

      /* CRC (Dummy) */
      token = __REV16(CalculateCRC16CCITT(0, (const char *)buff, 512));
      hspi.tsk_write_locked(&token, 2);
      token = 0;
      hspi.tsk_read_locked(&token, 1);
      if ((token & 0x1F) != 0x05) /* If not accepted, return with error */
      {
         tsk_sleep(100);
         TRACELN("!!!SD xmit -> %02X", token);
         return RES_ERROR;
      }
   }

   return RES_OK;
}


Сря Юни 19, 2019 7:20 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Юни 19, 2019 6:04 pm
Мнения: 9
Мнение Re: Проблем със SDHC карта
Всичко ми е същото освен това if (xmit_datablock(rbuff, 0xFC) != RES_OK)
промених кода да чака отговор и пак не се получава
да не би да иска коректна чек сума въпреки че е изключена?
При някой опити записва коректно само първия сектор а другите не ги записва въобще и зацикля картата като не приема никаква друга команда. При други опити записва още няколко сектора но пише глупости , явно не мога да улуча поредицата на подаване на команди и байтове както му е редът. На края на първия блок си отговаря нормално както си му е редът със 0xE5 и 0x00 което 0xE5 като се AND със 0x1F и се получава коректния отговор 0x05. И след това на втория блок става мишмаша. Рових в интернет няколко вечера но всичко което намирам за дадения проблем е една картинка със правоъгълничета вместо команди и данни и явно всички са копирали тази картинка едни от други и няма никакво ясно и коректно описание на алгоритъма и особенностите. Освен библиотеки и пдфи и страници описващи сд картите който изчетох не намерих нищо свястно по въпроса а само обща информация.


Сря Юни 19, 2019 8:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10376
Местоположение: Добрич
Мнение Re: Проблем със SDHC карта
чек сумите са изключени по дефаулт, доколкото помня. Но искрено те съветвам да ги включиш. Още повече, че има вероятност да имаш и хардуерен проблем. Щом пишеш или четеш глупости ;-)
Няма да е зле да боцнеш един скоп да видиш при теб картинката дали е с
"правоъгълничета", дали сигналчета от сорта на чип селект са там, където трябват... ей такива работи ;-)
Иначе стандарта си го има в нета и достатъчно подробно написан.


Сря Юни 19, 2019 9:43 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 8:27 pm
Мнения: 2008
Мнение Re: Проблем със SDHC карта
Да не би още при буферирането да се получава този проблем? Чек сумата ? Ако ти е голяма програмата на чипа може да става мазано!


Сря Юни 19, 2019 10:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Юни 19, 2019 6:04 pm
Мнения: 9
Мнение Re: Проблем със SDHC карта
Установката ми за разработка е пик процесор на хид усб и програма на уиндоус. Пик процесора само предава и приема байтове по SPI и управлява чип селекта , така че нищо съществено нямам в него. Работи коректно понеже съм направил инициализацията и четенето и изтриването на блокове и записа на единичен сектор. В него и програмата за уин нямам съмнения. Хардуера ми е наред и софтуера. Просто не мога да улуча протокола за запис на мулти сектори и това е.


Сря Юни 19, 2019 10:27 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Юни 19, 2019 6:04 pm
Мнения: 9
Мнение Re: Проблем със SDHC карта
Пак нагодих алгоритъма след всички опити на старото положение. Сега записва четни сектори - 0 и 2 а пък нечетните 1 и 3 пише мишмаш но накрая като подам 0xFD и спира и приема вече други команди. Мислех че е от захранването понеже го захранвам от усб а картата си дърпа доста , та захраних директно от лабораторно захранване. Няма промяна.


Чет Юни 20, 2019 12:23 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Ное 27, 2012 8:27 pm
Мнения: 2008
Мнение Re: Проблем със SDHC карта
Няма да съм ти много от полза, с тези карти не съм се занимавал но едва ли ще е такава екзотика понеже и старите устройства трябва да работят с тях. Скоро си дръпнах от фейсбук-а ти Micro SDHC Card и го разгледах като не видях много разлика. Да си призная че и за първи път чух за такива карти HC. Вече взе да ми писва от новите джаджи ....


Чет Юни 20, 2019 1:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 8:22 am
Мнения: 15501
Местоположение: София
Мнение Re: Проблем със SDHC карта
Нещо не ти е наред физически с интерфейса и/или управлението на SPI в пика. Особенно както казваш, че чете през едно...

Осцилоскопа закачи ли?

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Юни 20, 2019 9:01 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2592
Местоположение: Велико Търново / София
Мнение Re: Проблем със SDHC карта
Защо не намалиш скоростта , намали я няколко пъти за пробата

_________________
https://github.com/slav4ocom/


Чет Юни 20, 2019 12:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4624
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Проблем със SDHC карта
Инициализацията на картата се прави на 200 килохерца, после може да вдигаш клока, но не повече от 20 мегахерца.
Ето ти тук моя файл от ритъла който работи много стабилно. Аз ползвам FatFs, но ти ако ползваш нещо друго си извади само нужните парчета.


Прикачени файлове:
sd_spi.c [13.74 KiB]
203 пъти
sd_spi.h [1.2 KiB]
212 пъти

_________________
'просто' е технически синоним на 'красиво'
Чет Юни 20, 2019 12:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Юни 19, 2019 6:04 pm
Мнения: 9
Мнение Re: Проблем със SDHC карта
Начертах алгоритъма който ползвам и който гледах от документите и интернет.
SPI ми е на 100кхц - възможно най-ниско. Между байтовете имам 1 мс понеже ползвам хид усб.
Записва четни сектори - 0 и 2 а нечетните 1 и 3 пише мишмаш.
На четните отговаря нормално със E5 и 00. На нечетните отговаря със FF.
Някъде прочетох че във SPI режим се поддържат командите само за четене и запис на единичен блок а на мулти блокове не се поддържат.


Прикачени файлове:
Коментар на файл: алгоритъм
CMD25.PNG
CMD25.PNG [ 958 Байта | Прегледано 3827 пъти ]
Пет Юни 21, 2019 5:04 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10376
Местоположение: Добрич
Мнение Re: Проблем със SDHC карта
Пенев написа:
Някъде прочетох


Една жена каза :D

има си стандарт... Прочети в него за кои класове CMD25 е mandatory, как се проверява какъв ти е класа, съответно дали трябва да информираш картата за броя на секторите преди да почнеш. Има описано как се прави трансфер с повече сектори, къде ти отговаря с R1, къде ти отговаря с data response, къде може да каже busy и т.н.

Описано с думи и нарисувано с картинки... Стандарт като Слънце ;-)


Пет Юни 21, 2019 5:31 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни