реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> microSD SDIO, Помогите начать
GetSmart
сообщение Mar 30 2015, 19:03
Сообщение #16


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



ProductManualSDCardv2.2final.pdf

Раздел 5.5 Data Write.
Рисунок 5-5 Multiple Block Write Operation
На блок-схеме видно, что после CMD25 между любым блоком данных возможно появление BUSY.

По поводу грануляции SD-карт есть некоторое пояснение у Чена h__p://elm-chan.org/docs/mmc/mmc_e.html

Разве никто не делал лог появлений BUSY в мультисекторной записи? У меня на 8-гиговой возникали паузы после первого переданного блока данных в команде CMD25 и чтобы отправить остальные блоки приходится ждать пропадения BUSY. Причём грануляция появления BUSY в переводе на килобайты - от 16 КБ в начале файла коротких BUSY, и далее через грубо 8 раз грануляция увеличивается до 640 КБ и 45 мс BUSY. Карта по какой-то своей логике её меняет. Но блок, после которого формируется длинный BUSY сохраняется - после первого (видимо зависит от форматирования // кластерного сдвига // адреса в команде CMD25). В тесте CMD25 всегда была на 16 блоков.


Но я может быть перемудрил/преувеличил опасения по поводу "невыравненной мультиблоковой записи". Т.к. если в документе ProductManualSDCardv2.2final.pdf нет ограничений на выравнивание адреса, то видимо во всех SD-картах это изначально допускалось. И влияет невыровненность адреса (блока) только на момент формирования длинного BUSY.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 30 2015, 19:23
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Mar 30 2015, 22:03) *
Но я может быть перемудрил/преувеличил опасения по поводу "невыравненной мультиблоковой записи". Т.к. если в документе ProductManualSDCardv2.2final.pdf нет ограничений на выравнивание адреса, то видимо во всех SD-картах это изначально допускалось. И влияет невыровненность адреса (блока) только на момент формирования длинного BUSY.

Ограничений нет (и не было). Влияет, но для каждого типа карты влияние индивидуально, так что в конечном счете это не важно.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 30 2015, 19:35
Сообщение #18


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Что касаемо невыровненной записи, то за неё отвечают флаги WRITE_BLK_MISALIGN и WRITE_BL_PARTIAL в CSD.
Первый - определяет, допускает ли карта невыровненный начальный адрес блока, второй - допускает ли карта размер блока меньше чем 512.
Насколько я понял, первый роялит только для не-SDHC карт. (Потому что для SDHC карт не получится передать невыровненный адрес).

Что же до флага BUSY при мультиблоковой записи - не разу его не проверял, и не имел проблем. Возможно, с ним работает аппаратура SDIO контроллера.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 30 2015, 20:09
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AHTOXA @ Mar 30 2015, 22:35) *
Насколько я понял, первый роялит только для не-SDHC карт. (Потому что для SDHC карт не получится передать невыровненный адрес).

Да, в HC это убрали, но и на обычных картах никто (или почти никто) такую запись не поддерживал.

Цитата(AHTOXA @ Mar 30 2015, 22:35) *
Что же до флага BUSY при мультиблоковой записи - не разу его не проверял, и не имел проблем. Возможно, с ним работает аппаратура SDIO контроллера.

BUSY, естественно, выставляется - иначе у карты не было бы возможности "притормозить" запись.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Mar 31 2015, 09:25
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Если у кого есть информация, то любопытна и вторая вещь, о которой я писал. В SDHC BUSY может не вырабатываться после завершения мультисекторной записи. То есть карта накапливает непрерывные цепочки. Интересно, как давно и в каких типах такое стало происходить. И в связи с оптимизацией работы ПО с мультисекторной записью SD карт.

PS
Мой термин "невыравненная запись" отличался от документации SD-карт. Невыравненым считался адрес 512-байтного блока (не байта!) относительно грануляции NAND-памяти карты.

Сообщение отредактировал GetSmart - Mar 31 2015, 09:37


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Jul 19 2015, 18:02
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Пытаю SDIO на плате SK-STM32F217. Карту пока не подключал, хочу увидеть хоть какую-нибудь осмысленную активность на сигнальных линиях.
Осуществляю инициализацию и отправку команды, но вижу только мусор на линии CLK, на остальных ничего нет.
Может кто-нибудь проверить у себя мой вариант? Или подкинуть 100% рабочий код, без лишних функций.

Код
static SDIO_InitTypeDef s_sdio_param = {
                                         SDIO_ClockEdge_Rising,
                                         SDIO_ClockBypass_Enable,
                                         SDIO_ClockPowerSave_Disable,
                                         SDIO_BusWide_1b,
                                         SDIO_HardwareFlowControl_Disable,
                                         0
                                       };

void bsp_sd_init (void)
{
    SDIO_CmdInitTypeDef SDIO_CmdInitStruct;


    s_gpio_init();

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);

    SDIO_SetPowerState(SDIO_PowerState_ON);
    while (SDIO_GetPowerState() != 0x03)
    {
        continue;
    }

    SDIO_Init(&s_sdio_param);

    SDIO_ClockCmd(ENABLE);

    SDIO_CmdInitStruct.SDIO_CmdIndex = 0xAA;
    SDIO_CmdInitStruct.SDIO_Argument = 0xCCCCCCCC;
    SDIO_CmdInitStruct.SDIO_Response = SDIO_Response_No;
    SDIO_CmdInitStruct.SDIO_CPSM     = ENABLE;
    SDIO_CmdInitStruct.SDIO_Wait     = SDIO_Wait_No;
    SDIO_SendCommand(&SDIO_CmdInitStruct);
}

static void s_gpio_init (void)
{
    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_AHB1PeriphClockCmd(RCC_CLK |
                           RCC_CMD |
                           RCC_D3  |
                           RCC_D2  |
                           RCC_D1  |
                           RCC_D0, ENABLE);

    GPIO_PinAFConfig(GPIO_CLK, PINSOURCE_CLK, GPIO_AF_SDIO);
    GPIO_PinAFConfig(GPIO_CMD, PINSOURCE_CMD, GPIO_AF_SDIO);
    GPIO_PinAFConfig(GPIO_D3,  PINSOURCE_D3,  GPIO_AF_SDIO);
    GPIO_PinAFConfig(GPIO_D2,  PINSOURCE_D2,  GPIO_AF_SDIO);
    GPIO_PinAFConfig(GPIO_D1,  PINSOURCE_D1,  GPIO_AF_SDIO);
    GPIO_PinAFConfig(GPIO_D0,  PINSOURCE_D0,  GPIO_AF_SDIO);

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;

    GPIO_InitStructure.GPIO_Pin = PIN_CMD;
    GPIO_Init(GPIO_CMD, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = PIN_D3;
    GPIO_Init(GPIO_D3,  &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = PIN_D2;
    GPIO_Init(GPIO_D2,  &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = PIN_D1;
    GPIO_Init(GPIO_D1,  &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = PIN_D0;
    GPIO_Init(GPIO_D0,  &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Pin  = PIN_CLK;
    GPIO_Init(GPIO_CLK, &GPIO_InitStructure);
}


Сообщение отредактировал ohmjke - Jul 19 2015, 18:03
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Jul 24 2015, 16:46
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Ну что, никто не может помочь?
Go to the top of the page
 
+Quote Post
Мур
сообщение Jan 30 2018, 19:24
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Вопрос знатокам SDIO.(Завершаю мост на FPGA SDIO<-> N*UART)

Если по линии CMD кадр начинается с нулевого бита, то как обнаружить начало информационного кадра по DATA[3:0]? Я стал сомневаться, что для SD на входе CLK может отсутствовать частота (А значит именно её появление начинает отсчет информации).
Что наблюдали осциллографом? В Интернете противоречивая информация...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 30 2018, 20:02
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Мур @ Jan 30 2018, 22:24) *
В Интернете противоречивая информация...

Судя по всему, начинается с "0".
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Мур
сообщение Jan 31 2018, 08:24
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(adnega @ Jan 30 2018, 23:02) *
Судя по всему, начинается с "0".

Это ценно. Огромное ВАМ спасибо!!!

...остается выяснить CRC вычисляется с учетом этого стартового нуля или ТОЛЬКО данные в учете?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 31 2018, 08:34
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Мур @ Jan 31 2018, 11:24) *
...остается выяснить CRC вычисляется с учетом этого стартового нуля или ТОЛЬКО данные в учете?

Только данные, по каждой линии отдельно.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 31 2018, 09:23
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Мур @ Jan 31 2018, 11:24) *
Это ценно. Огромное ВАМ спасибо!!!

...остается выяснить CRC вычисляется с учетом этого стартового нуля или ТОЛЬКО данные в учете?

Рекомендую ознакомиться с SD Specifications Part 1 Physical Layer Simplified Specification Version 3.01:
Цитата
When the wide bus option is used, the data is transferred 4 bits at a time (refer to Figure 3-7). Start and
end bits, as well as the CRC bits, are transmitted for every one of the DAT lines. CRC bits are
calculated and checked for every DAT line individually. The CRC status response and Busy indication
will be sent by the card to the host on DAT0 only (DAT1-DAT3 during that period are don't care).

Более подробно про разные CRC описано в разделе 4.5 Cyclic Redundancy Code (CRC).
Go to the top of the page
 
+Quote Post
Мур
сообщение Jan 31 2018, 18:53
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(aaarrr @ Jan 31 2018, 11:34) *
Только данные, по каждой линии отдельно.

Странная фантазия... 4 вычислителя?... Трудно такую мысль представить у задумщиков SDIO
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 31 2018, 19:08
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Мур @ Jan 31 2018, 21:53) *
Странная фантазия... 4 вычислителя?... Трудно такую мысль представить у задумщиков SDIO

Странно было бы сделать иначе.
Go to the top of the page
 
+Quote Post
Мур
сообщение Jan 31 2018, 19:45
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(aaarrr @ Jan 31 2018, 22:08) *
Странно было бы сделать иначе.

Хм....
Проще гонять в сдвиговом регистре полином сразу по 4м линиям, чем 4мя по каждой из линий...
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 13:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01551 секунд с 7
ELECTRONIX ©2004-2016