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

kochevkv

Участник
  • Постов

    261
  • Зарегистрирован

  • Посещение

Весь контент kochevkv


  1. Можно копнуть в сторону проверки что там с правильным уровнем при старте на boot mode и boot cfg пинах. Потом фронта сигналов посмотреть, может плохая разводка, если своя. Проверить питание при включении, не проседает ли. На стм32 была проблема при старте из-за sd карты. Пиковая нагрузка при включении сильно проваливала напряжение.
  2. С кучей все понятно - если используете (или вызываемые функции используют) динамическое выделение памяти (всякие malloc, calloc, realloc в си) то надо считать вручную где и сколько учитывая вложенность вызовов функций. Или при отладке когда там они вернут ошибку невозможности выделения блока памяти. Со стеком - ошибки от его переполнения ловить сложнее. Нескольких килобайт обычно хватает, если в своих функциях в стеке не выделять массивы и большие структуры. А так если бездумно и на ПК можно поймать в рекурсии переполнение стека. Признаком переполнения стека у меня было "самопроизвольное" (я так сначала посчитал) изменение значений глобальных переменных и структур
  3. Только при окружающей температуре 20 градусов температура самого чипа будет больше. 5 Вт на такую площадь - это не мало. Надо рассчитать или проверить вживую
  4. Да, собственно, его и читаю. Все равно непонятно. Ну, спасибо за содержательный ответ.
  5. imxrt1052 именование пинов

    Осваиваю сейчас новый модуль на imxrt1052. Примеры вполне понятны, но вот работа с настройкой портов мне не очень понятна. Что за система обозначений используется у них в доках? Например пин GPIO_SD_B0_03 - что такое B0 ? Ищу в документации, но пока не нашел. Или вот имя регистра IOMUXC_SW_MUX_CTL_PAD_GPIO_AD_B1_08 Что такое AD, B1. Ну 08 я так понял просто порядковый номер регистра /*! * @brief Sets the IOMUXC pin mux mode. * @note The first five parameters can be filled with the pin function ID macros. * * This is an example to set the PTA6 as the lpuart0_tx: * @code * IOMUXC_SetPinMux(IOMUXC_PTA6_LPUART0_TX, 0); * @endcode * * This is an example to set the PTA0 as GPIOA0: * @code * IOMUXC_SetPinMux(IOMUXC_PTA0_GPIOA0, 0); * @endcode * * @param muxRegister The pin mux register. * @param muxMode The pin mux mode. * @param inputRegister The select input register. * @param inputDaisy The input daisy. * @param configRegister The config register. * @param inputOnfield Software input on field. */ IOMUXC_SetPinMux( uint32_t muxRegister, uint32_t muxMode, uint32_t inputRegister, uint32_t inputDaisy, uint32_t configRegister, uint32_t inputOnfield ) { *( (volatile uint32_t *)muxRegister ) = IOMUXC_SW_MUX_CTL_PAD_MUX_MODE( muxMode ) | IOMUXC_SW_MUX_CTL_PAD_SION( inputOnfield ); if (inputRegister != 0UL) { *( (volatile uint32_t *)inputRegister ) = inputDaisy; } } Что за inputOnField? inputDaisy? Может есть хороший документ или статья в инете с расширенными пояснениями? Или вот вызов инлайн функции IOMUXC_SetPinConfig( IOMUXC_GPIO_B1_12_GPIO2_IO28, 0x017089U ); Может есть заголовочный файл где 0x017089U разбивается на что-то удобочитаемое в виде value1 | value2 | value3 ? Честно говоря, первый раз столкнулся с тем что такой непонятный подход к управлению выводами. STM32 зашел на "ура", а тут какая-то китайская грамота.
  6. Может есть у кого остатки на складах? Или готовы найти и продать? Если кто в теме, прошу совета по замене (ОЗУ 16..64 МБ, частота 500 МГц, встроенная флеш от 4 МБайт, интерфейс для дисплея от 16 бит цветности)
  7. imxrt 1052 питание usb

    Странная практика. Li-ion батареи 3,7 вольта выдают. Т.е. сразу отрезаем область применения. Ну или усложняем схему и увеличиваем потери энергии.
  8. imxrt 1052 питание usb

    Ну да. Что-то я не то говорю. Там немного другая история. Есть модуль forlinx fet1052. И они 5 В питания сделали. А старый на bf548 был 3,3. Не понял я зачем китайцы 5 В сделали. Подумал что решили запитать usb а остальное через понижающий преобразователь. В общем, вопрос к китайцам
  9. imxrt 1052 питание usb

    У меня не хост, а устройство. И, насколько я помню, в схемах с питанием контроллера 3,3 для режима хоста 5 В подавались обычно через верхний ключ управляемый 3,3 вольтовым контроллером. А вот для режима "устройство" не нужны 5 вольт. В даташите на этот контроллер написано однозначно - 5 В. Вот я и не понимаю зачем мне 5 В если у меня устройство, а не хост и зачем так ограничивать разработчика схемы 5-ю вольтами, если они мне не нужны.
  10. imxrt 1052 питание usb

    Вопрос такой. Почему в imxrt1052 питание usb 5V? Чем им 3,3 V не угодили? В stm32 хватало, а тут нет. В итоге имеем что модернизируемую с плату МК приходится переводить на 5V. При этом все остальное питается 3,3V. Ну не считая 1,8V для ядра, что типично для таких частот. Может все же можно подать 3,3V т.к. я неправильно читаю документацию?
  11. Если без заморочек для пользователя, то режим флешки и usb. Остальное уже сложнее. Прошивки отправлять любым способом в файле. Таким образом можно прошивать хоть в поле с телефона.
  12. Ну дерево то уже есть. Я только не понял как ускорить поиск. Т.е. есть объект с ID1 = 1. Есть несколько веток которые уже имеют ID1 и ID2. Ниже идет еще уровень с ID1, ID2 и ID3. Но чтобы найти следующий элемент на третьем уровне надо прочитать все записи в файле этого уровня пока не встретится нужная комбинация ID1 ID2 и ID3. Я сейчас пишу программу чтобы она объекту ID1 еще добавила номера записей для нижнеуровневых объектов. Т.е. пробежался по файлу один раз, а второй поиск уже по сохраненным индексам. И хотелось бы найти какой-то готовый движок, который это умел бы делать, автоматически обновлял индексы при удалении какой-либо записи или при изменении поля ID любой записи. Или вот еще реальная задача - выдать первое ID3 значение которого нет в объектах с заданными ID1 и ID2. Удалили мы объект третьего уровня и появился новый ID3 который освободился.
  13. Всем доброго дня 🙂 Есть некая самописная "типа" БД в проекте для микроконтроллера. Суть такая, что каждый тип записей хранится в своем файле и для чтения-записи какой-либо записи данного типа надо знать просто номер. Т.е. в каждом файле хранятся записи только одного размера. Сейчас появилась проблема, что работа с такой БД очень сильно замедляется при увеличении количества записей, т.к. поиск записи по значениям полей идет чисто последовательным способом, перебором то бишь. Сейчас пытаюсь написать код для индексации этих записей, т.е. так чтобы у объектов были прямые ссылки на номера всяких связанных объектов. Но чувствую что я изобретаю велосипед. Я слышал что на МК в проект на Си можно портировать SqlLite. Но я совсем чайник в работе с базами данных. Получится ли как-то "прикрутить" SqlLite или что-то подобное к такому способу хранения информации? Чтобы, например, выполнить поиск всех объектов с нужным значением поля и чтобы сделать индексацию для дальнейшего быстрого поиска.
  14. У STM32 есть ещё внутренний загрузчик-самопрошивальщик по DFU интерфейсу. Если есть USB в устройстве, то достаточно ещё сделать джампер на ногу конфигурирующую тип загрузчика и тогда всегда можно будет прошить устройство без программаторов типа ST-LINK.
  15. А не скажете какие минимальные требования к ОЗУ контроллера и сколько памяти кода требуется под это всё?
  16. Сначала хотели найти EMMC с последовательным интерфейсом и в корпусе SO-8 как NAND или NOR. По сути хотелось бы SD карту в корпусе SO-8 Но не нашлось такого. Либо многовыводный BGA, который у нас не любят совсем ну и платы под него многослойные надо, либо NAND в SO-8 но с вышеуказанными не решенными проблемами А она в Windows не поддерживается (?), а нужна ещё поддержка USB MSD. Хотел найти реализацию MTP интерфейса где-нибудь на STM32, но не нашёл. А так можно было бы YAFFS или Little FS использовать.
  17. Давно не заглядывал сюда В итоге отказались от этой NANDы в пользу SD карты (у нормальных карт контроллер износа встроенный). Просто хотелось минимальный размер записи в 512 байт, а у NAND чтобы перезаписать 512 байт надо стереть кластер (уж не помню как он там называется) 64 кБ. Таким макаром перезапись FAT таблицы погубит флешку очень быстро. Хотя кто знает что там на SD карте происходит физически, может тоже так же, но там кэш встроен должен быть 64 кБ, а для NANDы только 4к, т.е. оперативу контроллера придется брать. И скорость оказалась нам недостаточна. С моим простым алгоритмом выравнивания с буферизацией работало медленно.
  18. Всем доброго дня! Выбираю фронтальную панель для вывода USB 3.0 и увидел вариант, где эта панель имеет только один разъем, как например тут https://www.exegate.ru/images/catalog/full/ex283578_2.jpg, хотя на материнке подключается 20 пиновый, к которому можно подключить 2 usb разъема. Не будет ли урезать такой хаб скорость или пропусная способность 2-х разъемов с одного 20 пинового уже разделяется на 2 канала? Т.е. вопрос в том является ли скорость каждого разъема 5 GBit или 20 пиновый сам подключен к хабу с пропускной 5GBit?
  19. Наткнулся на вот такой документ http://read.pudn.com/downloads786/sourcecode/embedded/3108807/UM1653_Rev1.pdf в котором описывается работа библиотеки работы с NAND флеш от STM содержащую в себе, помимо прочего, реализацию алгоритма выравнивания износа страниц. Может кто даст направление где искать саму библиотеку? На сайте stm не нашел. Также буду рад ссылкам на другие реализации выравнивания износа (nand wear leveling). Есть еще возможность использования Yaffs, LittleFS и прочих, но хотелось бы иметь возможность подключения устройства в режиме Mass Storage Device, что подразумевает использование FAT. Как вариант некоторого "извращения" можно создать 1 файл на nand флеши прибора в LittleFS, например, и писать туда блоками по 512 байт считая что это функции записи непосредственно на носитель, а поверх этого уровня уже FAT. Что скажете?
  20. Да. Этот вариант применения понятен. Всё адресное пространство может быть больше, чем разрядность платформы. intptr_t я так понял синоним типа ptrdiff_t. Тогда да. Я про него говорю. Остаётся вопрос с доступом к элементам дальше PTRDIFF_MAX и бывают ли платформы с возможностью задать массив больше PTRDIFF_MAX
  21. Объясните зачем нужны беззнаковые указатели и тип вроде uint_ptr, если максимальный размер массива, который я могу объявить в Visual Studio равен INTPTR_MAX, т.е. половине UINTPTR_MAX. Есть ли ограничения в стандарте языка С на размер массива? Даже если есть платформы, в которых можно задать массив больше INTPTR_MAX, как получить доступ к элементам массива? При доступе к элементам массива через индекс [] значение в квадратных скобка приводится к intptr_t. Получится ли использовать арифметику беззнаковых указателей для доступа к элементам такого массива при индексе больше INTPTR_MAX? Вопрос скорее теоретический, но интересно.
  22. P.S. Отредактировал ардуиновскую либу в обычный язык си. Чтение UID работает отлично. Так что модуль рабочий, хоть и с совсем другим (малоизвестным) номером версии чипа.
  23. STM32L4_NUCLEO144 отладочная плата. Чип селект в режиме GPIO в ноль устанавливаю перед передачей адреса и возвращаю в 1 уже после чтения второго байта. Вот тут http://forum.amperka.ru/threads/rfid-rc522.12744/ пишут что это чип китайский. Он такую версию выдает. Но уровни у меня 3,3В и меня это волновать не должно. Пока застрял на самотестировании чипа. Наверно, надо проверить другие его функции. Может быть китайцы в копии урезали то что не относится непосредственно к работоспособности.
  24. Ну я тоже об этом подумываю. А то уже второй раз натыкаюсь на модуль, который вроде бы прост, но ошибешься где-то в одной мелочи, которая написана в одном месте огромного даташита, и все - не работает ничего. Первый раз тоже только сравнением с работающим протоколом нашел свою ошибку.
  25. Чтобы не плодить темы по модулю напишу тут. Читаю версию чипа и результат какой-то совсем не тот, который должен быть. Читает 0x12 (18 десятичное). Самотестирование не запускается. Кто с таким сталкивался? Как вообще проверить работоспособен ли чип? Прикрепил скрины с осциллографа. Первый снимок - это отправка адреса по MOSI и тактовая, второй - тактовая и ответ.
×
×
  • Создать...