BlackfinResearch 0 Опубликовано 30 июля, 2018 · Жалоба Подсоединил DS карту к STM32H743(отладка Nucleo) к SDIO1. Сгенерировал Кубом Хал и вперёд. Читаю нулевой сектор SD карты, который я видел и сравниваю с заранее правильно считанным эталоном побайтно. Сравнение показывает разный результат. Выводил содержимое 0-го сектора на дисплей: часть байтов пропускается или не те, что нужно. Режим без ДМА. Отключал кеширование, выравнивал буфер данных на 512 байт - ничего не помогло. Удалось обнаружить, что функция чтения HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout) возвращает всегда: HAL_SD_ERROR_DATA_CRC_FAIL Эррата на H743 даёт мутное описание, что-то связанное с линией данных 2 (Wrong data line 2 generation between two blocks during DDR transfer with Read wait mode enabled) Но раскурить не удалось. Клок тоже понижал , ставил делитель до 256 - не помогает. Поддтяжки к питанию (PULL UP) всех линий включены. Пробовал 3 карты: 2 ,4 и 16 ГБ - со всеми тремя фигня. На STM32H407 с SDIO все карты работают. В чем может быть проблема? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
nanorobot 0 Опубликовано 30 июля, 2018 (изменено) · Жалоба Подсоединил DS карту к STM32H743(отладка Nucleo) к SDIO1. Сгенерировал Кубом Хал и вперёд. В чем может быть проблема? У меня тоже заказана такая же плата. Начинаю потихоньку переживать , похоже редкостный глюкодром, судя по последним темам.... Изменено 30 июля, 2018 пользователем nanorobot Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlackfinResearch 0 Опубликовано 30 июля, 2018 (изменено) · Жалоба У меня тоже заказана такая же плата. Начинаю потихоньку переживать , похоже редкостный глюкодром, судя по последним темам.... Не переживайте. Скорее всего Хал/Куб что-то не учли, и проблема решается вставкой ворк-эраунда. На 407-м тоже пришлось копаться несколько дней(закончилось скачиванием обновленной библиотеки с фиксом). Приложил результат - слева правильное чтение сектора на ПК, справа - не верное чтение (пропуск символов, не те)- на STM32H743: Изменено 30 июля, 2018 пользователем __inline__ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
nanorobot 0 Опубликовано 30 июля, 2018 · Жалоба Не переживайте. Скорее всего Хал/Куб что-то не учли, и проблема решается вставкой ворк-эраунда. На 407-м тоже пришлось копаться несколько дней(закончилось скачиванием обновленной библиотеки с фиксом). Уповаю на Jiovanni di Sirio c его ChibiOS / HAL - еще ни разу не подводил. Кстати советую попробвать... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlackfinResearch 0 Опубликовано 30 июля, 2018 (изменено) · Жалоба Удалось запустить SD карту SD HC 10-й класс скорости + 1-й класс в терминологии UHS-I . Емкостью 16 ГБ. Сектора стали нормально читаться после как на линию CLK повешал ферритовую втулку (с провода питания ноутбука - длина суть больше 1 см). Без ферритовой втулки даёт CRC-ERROR и битые данные. Остальные карты с 2 и 4 ГБ не работают даже с втулкой. Карта подключена к отладке Nucleo-H743 проводами длиной около 15 см. Надо будет попробовать укоротить насколько возможно. Питание на карту беру от встроенного на плате LDO 3,3V. Между питанием и землёй карты - тантал 10 мкФ + керамика 0.1 мкФ. Изменено 30 июля, 2018 пользователем __inline__ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MasterElectric 0 Опубликовано 30 июля, 2018 · Жалоба У меня тоже заказана такая же плата. Начинаю потихоньку переживать , похоже редкостный глюкодром, судя по последним темам.... Это мы рукожопые, а не они) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Obam 0 Опубликовано 30 июля, 2018 · Жалоба Удалось запустить SD карту SD HC 10-й класс скорости ... после как на линию CLK повешал ферритовую втулку (с провода питания ноутбука - длина суть больше 1 см). Без ферритовой втулки даёт CRC-ERROR и битые данные. Выкрутасы из методов техники СВЧ как-бы не вредны, но это уже какой-то "шаманизм". Тогда уж и на каждый DAT по бусинке. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
nanorobot 0 Опубликовано 30 июля, 2018 · Жалоба Это мы рукожопые, а не они) Тут про SPI четыре страницы накатали. c F0 и F4 проблем с SPI не имел. Ну почти не имел. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlackfinResearch 0 Опубликовано 31 июля, 2018 (изменено) · Жалоба Укоротил все линии соединения с SD карточкой до 4 см. Подключил карту к AVCC/AGND. На провод SDIO CLK надел ферритовую втулку. Между выводом питания и землями на карте - три конденсатора: 0,1 мкф(керамика) + 10 мкФ(тантал) + 220 мкФ(электролит) Заработали все три карты! Пробовал убирать ферритовую втулку с SDIO_CLK и понижать частоту SDIO CLK - карты не работают. Инит карты такой (HAL, Cube): static void MX_SDMMC1_SD_Init(void) { hsd1.Instance = SDMMC1; hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B; hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; hsd1.Init.ClockDiv = 0; } Частотомером обнаружил, что Куб не даёт сделать частоту SD CLK выше, чем 24.176 МГц. Иными словами, все делители hsd1.Init.ClockDiv, меньшие чем 4 - не прокатывают - частота 24.176 МГц. Снять это ограничение можно, расковыряв HAL Куба. Ниже частоты SD CLK, измеренные частотомером и значения hsd1.Init.ClockDiv: hsd1.Init.ClockDiv=4, CLK=24.176 MHz hsd1.Init.ClockDiv=8, CLK=12.09 MHz hsd1.Init.ClockDiv=32, CLK=3.023 MHz hsd1.Init.ClockDiv=64, CLK=1.51 MHz hsd1.Init.ClockDiv=128, CLK=0.756 MHz На сильно низких частотах касание щупа частотомера к SD CLK приводит к повисанию SD карты. GPIO настроены так (на всех линиях -встроенные PULL UP, кроме CLK. Внешних резисторов нет): void HAL_SD_MspInit(SD_HandleTypeDef* hsd) { GPIO_InitTypeDef GPIO_InitStruct; if(hsd->Instance==SDMMC1) { /* USER CODE BEGIN SDMMC1_MspInit 0 */ /* USER CODE END SDMMC1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_SDMMC1_CLK_ENABLE(); /**SDMMC1 GPIO Configuration PC8 ------> SDMMC1_D0 PC9 ------> SDMMC1_D1 PC10 ------> SDMMC1_D2 PC11 ------> SDMMC1_D3 PC12 ------> SDMMC1_CK PD2 ------> SDMMC1_CMD */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11; // |GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; //!!! включить подтяжки! GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); //C12 => CK, NO PULL GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; //!!! GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; //!!! включить подтяжки! GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_SDIO1; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN SDMMC1_MspInit 1 */ /* USER CODE END SDMMC1_MspInit 1 */ } } Иллюстрации ниже (подсоединение, втулки и SD-карты, которые успешно работают): Пробовал в High Speed Mode наскоряк переключить - не работает. Включал путём установки: #define USE_SD_TRANSCEIVER 1 Изменено 31 июля, 2018 пользователем IgorKossak [codebox] для длинного кода. [code]-для короткого!!! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alechek 0 Опубликовано 31 июля, 2018 · Жалоба Пробовал убирать ферритовую втулку с SDIO_CLK и понижать частоту SDIO CLK - карты не работают. hsd1.Init.ClockDiv=128, CLK=0.756 MHz В такой ситуации только логический анализатор поможет быстро разобраться. Полагаю, опять STM косячнули и данные изменяются одновременно с фронтом клока. Может попробовать CLK сделать длиннее/короче остальных линий? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Integro 0 Опубликовано 31 июля, 2018 · Жалоба Косячат тут не STшники Если нужны большие скорости на этих соплях: 1. Укоротить провода до максимально коротких, 1-2см 2. Установить pull-up'ы в соответствии со спецификацией Из опыта скажу, что при питании 3V и длине проводов 10-15 см на скорости 10MHz уже будут ошибки CRC Если это только макет и планируется разводка PCB советую не заморачиваться и ждать нормальную плату, если это своя подделка, рекомендую привести все в порядок. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Vasil_Riabko 0 Опубликовано 31 июля, 2018 · Жалоба Добавлю свои пять копеек. STM32L476 - SDIO . Упорно не работали карты емкостью более 4 ГВ . Проблема решилась установкой резистора 30 ом в линию SDIO_CLK . с тех пор не встречал карт которые не работают. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
aaarrr 0 Опубликовано 31 июля, 2018 · Жалоба GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; Зачем VERY_HIGH-то? Чтобы гарантированно не работало? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alechek 0 Опубликовано 31 июля, 2018 · Жалоба Для 10 МГц да, 10 см провод уже длинноват. Но речь то о 700 кГц! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
aaarrr 0 Опубликовано 31 июля, 2018 · Жалоба Для 10 МГц да, 10 см провод уже длинноват. Но речь то о 700 кГц! Да хоть 32кГц, без разницы: это всего лишь частота запуска лютой скорости фронта в линию. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты