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

    

Almaz1988

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о Almaz1988

  • Звание
    Частый гость

Посетители профиля

1 205 просмотров профиля
  1. update. http://new-robotics.com/lorawan-шлюз-сборка-первых-плат/
  2. Linux. Разовая работа

    Добрый день. Предлагаю разовую работу. Имеется отладочная плата OrangePi Zero: http://www.orangepi.org/orangepizero/ Работает под ОС Armbian. Установлена на MicroSD карту. Крутится следующий софт: 1. Стат. бибилиотека https://github.com/Lora-net/lora_gateway 2. Приложение https://github.com/Lora-net/packet_forwarder 3. Сервис (написан на Go) https://github.com/brocaar/lora-gateway-bridge Требуется пересесть на OpenWrt и загружаться из SPI флеш-памяти, распаянной на плате, т.е. избавиться от SD карты. Имеется патч openWrt под данную отладочную плату, - будет предоставлен. В идеале нужно уместиться в 8 МБ, но устроит и 16МБ. Из всей периферии используется SPI и проводной Ethernet, - все остальное можно выпилить. Присылайте отклики на почту - almaz1c@new-robotics.com с указанием стоимости и длительности.
  3. И в окне форматирования отображается 32.5 КБ вместо 6 МБ:
  4. Добрый день. Приключения не закончились. Методом перебора подобрал следующие параметры для эмуляции накопителя объемом 6МБ: Кодuint8_t mbr[16] = {         0x00,                     // not bootable         0x01,                     // head number of partition start sector in CHS form. ??         0x01,0x00,                // cylinder number ??         0x01,                    // FAT12 (CHS/LBA, <65536 sectors)         0x07,                    // header number of partition end sector in CHS form. ??         0xE0,0xC9,                // cylinder number and sector number in the cylinder... ??         0x3F,0x00,0x00,0x00,    // partition start sector in LBA (0x3F = 63)         0xFF,0x7F,0x00,0x00        // partition size in unit of sector (0x7FFF = 32767) }; uint8_t br[62] = {         0xEB,0xFE,0x90,                            // Jump to bootstrap         0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,// "MSDOS5.0"         0x00,0x02,                                // 512 bytes per sector         0x20,                                     // 1 sector per cluster         0x01, 0x00,                                // number of reserved sectors         0x01,                                    // number of FAT copies         0x00, 0x02,                                // number of root directory entries         0xF0,0x40,                                // Total number of sectors in the filesystem         0xF8,                                    // descriptor type - hard disk         0x01,0x00,                                // Number of sectors per FAT         0x3F,0x00,                                // Number of sector per track         0xFF,0x00,                                // number of heads         0x3F,0x00,                                // Number of hidden sectors         0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x29,0x00,0x00,0x00,0x00,0x4E,0x4F, 0x20,0x4E,0x41,         0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x20,0x20,0x20,0x20,0x20 }; Теперь накопитель отображается в ОС windows следующим образом: Для того, чтобы переваривать файлы размером Мегабайты функцию STORAGE_Write_FS модифицировал следующим образом: Код/**   * @brief  .   * @param  lun: .   * @retval USBD_OK if all operations are OK else USBD_FAIL   */ int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) {   /* USER CODE BEGIN 7 */     if(blk_addr <= 97) {         flash_write(lun, buf, blk_addr, blk_len);     } else {         printf("!W blk %d, cnt %d\r\n", blk_addr, blk_len);     }     if(blk_addr == 97) {         printf("W blk %d, cnt %d\r\n", blk_addr, blk_len);         printf("%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\r\n", *(buf+0x00), *(buf+0x01), *(buf+0x02), *(buf+0x03), *(buf+0x04), *(buf+0x05), *(buf+0x06), *(buf+0x07), *(buf+0x08), *(buf+0x09), *(buf+0x0A), *(buf+0x0B), *(buf+0x0C), *(buf+0x0D), *(buf+0x0E), *(buf+0x0F) );     }     return USBD_OK;   /* USER CODE END 7 */ } Где блок 97 - это область памяти, в котором FatFs создает реально существующий файл объемом 5 байт - этот блок записывается во флеш память МК по-настоящему, а все последующие нет. При попытке записать файл размером 16КБ и выше получаю следующую ошибку: В чем может быть проблема?
  5. Цитата(controller_m30 @ Mar 17 2018, 23:30) Вот содержимое MBR и BS секторов для 16 Мбайт "флешки". Скрины из WinHex. Если что неясно спрашивайте. Вот в текстовом виде Для MBR. Фрагмент располагается с адреса 1BEh (на 1-й картинке - начало выделенной области). Код0x00,0x03,0x02,0x00,0x06,0x07,0xE0,0xC9,0x61,0x00,0x00,0x00,0xff,0x7f,0x00,0x00 Для BootSector Код0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x04,0x04,0x00 0x02,0x00,0x02,0xff,0x7f,0xF8,0xF2,0x00,0x3F,0x00,0xFF,0x00,0x61,0x00,0x00,0x00 0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x0C,0x72,0xFA,0xB0,0x4E,0x4F,0x20,0x4E,0x41 0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x36,0x20,0x20,0x20 Для MBR и BS достаточно хранить в памяти контроллера только эти фрагменты, а остальное легко сформировать программно. Спасибо! Очень помогло! Методом тыка добился эмуляции 678 КБ памяти: Кодuint8_t mbr[16] = {         0x00,                     // not bootable         0x01,                     // head number of partition start sector in CHS form. ??         0x01,0x00,                // cylinder number ??         0x01,                    // FAT12 (CHS/LBA, <65536 sectors)         0x07,                    // header number of partition end sector in CHS form. ??         0xE0,0xC9,                // cylinder number and sector number in the cylinder... ??         0x3F,0x00,0x00,0x00,    // partition start sector in LBA (0x3F = 63)         0xFF,0x7F,0x00,0x00        // partition size in unit of sector (0x7FFF = 32767) }; Кодuint8_t br[62] = {         0xEB,0x3C,0x90,                            // Jump to bootstrap         0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,// "MSDOS5.0"         0x00,0x02,                                // 512 bytes per sector         0x04,                                     // 1 sector per cluster         0x01, 0x00,                                // number of reserved sectors         0x01,                                    // number of FAT copies         0x00, 0x02,                                // number of root directory entries         0xF0,0x07,                                // Total number of sectors in the filesystem         0xF8,                                    // descriptor type - hard disk         0x01,0x00,                                // Number of sectors per FAT         0x3F,0x00,                                // Number of sector per track         0xFF,0x00,                                // number of heads         0x3F,0x00,                                // Number of hidden sectors         0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x29,0x00,0x00,0x00,0x00,0x4E,0x4F, 0x20,0x4E,0x41,         0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x20,0x20,0x20,0x20,0x20 }; Но изменение параметров совершенно рандомно влияет на объем памяти, которое "видит" Винда на ПК. Например, если в br поменяю поле "Total number of sectors in the filesystem" c 0x07F0 на 0x7FFF, т.е. увеличу значение поля, то Винда обнаружит меньше памяти - порядка 500 КБ. Описание, которое нашел на просторах интернета - весьма скромное: https://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html http://elm-chan.org/docs/fat_e.html#partition и не дает понимания на что влияет каждый параметр. Магическое "CHS form" гуглу вообще неизвестно)
  6. Мне пока удалось съэмулировать лишь 110КБ памяти. Для этого в запросах от ПК на считывание оказалось достаточно подменять: 1) значение байта по адресу 0x1D0 (сектор 0), который содержит размер раздела (partition): 2) значение байта по адресу 0x7E13 (сектор 63), который содержит, видимо, размер раздела (пока не уверен): Если меняю значение байтов, выделенных на скриншотах синим цветом на 255 (0xff), то получаю размер флеш накопителя ( 255 + 63 ) * 512 = 159 КБ. Как только пытаюсь задать количество секторов, превышающее 0xff, т.е. перезаписать больше одного байта, то все рушится. Видимо чего-то не учел. Нет ли у кого-нибудь бинарного "скана" (image) файловой системы на несколько мегабайт?
  7. Цитата(jcxz @ Mar 16 2018, 23:42) О каком размере файла хоть речь-то? Вообще в любом STM32 есть довольно большой объём памяти - flash-памяти программ. Почему не использовать её раз уж так хочется mass storage? Но я бы не заморачивался: раз USB, значит - реализовать DFU. DFU именно для того и предназначен (обновления прошивки). Вместо странного использования mass storage. Ну или хоть сделать CDC и передать туда файл прошивки. Размер файла от 1-го МБ/ USB Mass storage - требование заказчика. Ему хочется, чтобы обновление прошивки ПЛИС выглядело простой записью файла на флешку, подключенную к ПК по USB. И роль этой флешки должна играть STM32 с размером флеш-памяти 128 КБ. Цитата(Andreas1 @ Mar 17 2018, 11:11) Mass Storage - просто считывание/запись сектора и ФС вы уже сами должны изображать. По минимуму в флеше STM32 должно хранится содержимое 4 секторов по 512 байт: mbr, boot, fat, root с прописанными туда данными вашего файла. При этом отдавать в зависимости от номера запрошенного сектора или эти предопределенные сектора, или выкачанную по SPI вашу прошивку. Записывать можно примерно также, но желательно размер носителя сделать равным размеру прошивки+служебная область файловой системы. При этом новая прошивка будет перезаписывать старую. Удалось впихнуть FatFS от Chan'а в 64 КБ флеш-памяти МК, оставив другие 64 КБ под память программы. Выяснилось, что при перезаписи файла с ПК файл остается в прежнем секторе, не меняя своего положения. На первый взгляд это очень упрощает задачу в том случае, если файл прошивки ПЛИС будет иметь одно и то же название - тогда достаточно будет отслеживать запись в один и тот же сектор памяти. Но прежде этого нужно научиться симулировать для ПК флешку размером несколько мегабайт имея всего лишь 64 КБ.
  8. Цитата(_4afc_ @ Mar 16 2018, 01:23) Можно конечно парсить на лету диск, чтоб понять, что запись сектора - это создание файла... это будет увлекательно, но примеры врятли есть - надо писать самому. Видимо, это единственный возможный вариант. Попытался прикрутить библиотеку FatFS от Chan - не хватает памяти. Пока удалось следующее: Во флеш-память usb mass storage устройства загрузил файл с наименованием "00000.txt" и содержимым "77777", т.е. обычный текстовый файл размером 5 байт. После этого считал память МК. USB mass storage устройство имеет размер 43 блока по 512 байт. 20 КБ из них занято файловой системой FatFS, т.е. устройство после подключения к ПК по USB имеет размер 1.5 КБ: 43 * 512 = 0x5600 Глянул содержимое памяти HEX-редактором и действительно, флеш-память МК начиная с адреса 0x08010000 по которому хранится содержимое usb mass устройства по адрес 0x08015600 Содержит осмысленные данные. Вся остальная память после 0x08015600 заполнена FF. Вырезал данный кусок памяти 0x08010000 - 0x08015600в отдельный файл (он в приложении). Ищу кодовую последовательность 30 30 30 30 30 ( "00000" в ASCII кодах, т.е. наименование файла) - вижу ее по адресу 0x1060: Кодовая последовательность 37 37 37 37 37 ( "77777" в ASCII кодах, т.е. содержимое файла) расположена по адресу 0x5400: Адрес 0x5400 соответствует началу последнего сектора (размер сектора 512 байт = 0x200). Интуиция подсказывает, что рядом с названием файла должен располагаться указатель на адрес, по которому расположено содержимое файла и его размер. Видимо предстоит раскуривать какую-либо библиотеку, реализующую FatFS, например, того же самого Chan'а в поисках нужного куска кода, который откроет свет на взаимосвязь между названием файла и его расположением.
  9. Добрый день! Имеется печатная плата, на которой расположена ПЛИС как основное устройство и микроконтроллер STM32, как вспомогательное устройство для загрузки конфигурационного файла в ПЛИС. Замысел следующий - STM32 реализует USB Mass storage, в результате, пользоваттель, при подключении по USB видит подключенную к компу флешку, загружает на эту флешку bit-файл, которым инициализируется ПЛИС. Реализовал данное устройство с памятью во внутренней памяти микроконтроллера, но проблема в том, что она меньше размеров загрузочного файла. Сам файл мне сохранять в памяти не нужно, - требуется лишь дергая ножками STM32 загрузить его в ПЛИС, соответственно нужно эмулировать для компа память большего размера, а для этого, необходимо парсить usb-запросы от компа на запись и считывание. Сама реализация USB mass storage устройства в STM32 - проще некуда, достаточно реализовать лишь две функции КодSTORAGE_Write_FS и КодSTORAGE_Read_FS См. файл по ссылке: https://cloud.mail.ru/public/ALsV/UTQGUYgwo Мне нужно модифицировать их так, чтобы понимать, что в данный момент времени пришел запрос на загрузку файла, вычитать его данные, делая вид, что сохраняю его во флеш, а на самом деле передать его в ПЛИС, а в ответ на запрос на считывание его просто вернуть набор нулей. Кто-нибудь сталкивался с подобной задачей? Поделитесь мануалами, примерами кода, описанием протокола usb-команд к usb mass storage.
  10. Цитата(CADiLO @ Sep 14 2017, 14:23) Может это поможет? Вот устройство где антенны считались по приведенным докам - там на плате GSM + BT антенны. http://mobilesoft.com.ua/wp-content/upload...44-1024x616.jpg Спасибо за ссылки! Интересная задумка насчет настраиваемой антенны. Расскажите о вашем дизайне пожалуйста? Какие результаты получились, для чего переходное отверстие на антенне и, видимо, в схему не заложены согласующие компоненты?
  11. Цитата(Peps @ Jan 13 2010, 16:55) в инете гуляет файлик Antenna PCB.rar (вроде даже на этом сайте где то есть - но могу и ошибаться). Где именно гуляет этот файлик?:-) Где бы найти проверенный футпринт печатной антенны на 900 МГц?
  12. Из последнего: http://new-robotics.com/lora/
  13. Из последнего: http://new-robotics.com/iot-ble/
  14. Занимаюсь разработкой электроники под заказ. Кризисные цены, стахановские темпы. Полная оплата только после предоставления полноценного прототипа, который вас полностью устраивает. За воздух и пустые обещания платить не придется. Большое количество наработок, что означает сжатые сроки и невысокую стоимость разработки. ВЫПОЛНЯЕМЫЕ РАБОТЫ: Программирование Bare metal и embedded linux; Разработка принципиальной схемы устройства; Подбор компонентов; Трассировка печатной платы, заказ плат на производстве; Монтаж печатных плат; Отладка железа; Написание ПО; Доведение до прототипа и серийного изготовления; Дальнейшая поддержка и сопровождение изделия; НАВЫКИ: Микроконтроллеры (STM32, AVR, Microchip, Миландр); ПЛИС (Virtex-4/6, Zynq-7000); Программирование Bare Metal и Metal Linux; Разработка печатных плат в Altium; Полноценная лаборатория для отладки ПО и железа; ПОРТФОЛИО: www.new-robotics.com https://freelansim.ru/freelancers/new-robotics Контактная информация: almaz1c@new-robotics.com 8-926-420-69-72 Обращайтесь, даже если у вас не сформировалось четких требований к изделию :-)
  15. Цитата(Hale @ Dec 5 2016, 04:18) кстати, верно. Для достоверности надо спроектировать простые полосковые линии в разных слоях и попросить производителя их изготовить. Затем промерять на VNA и подогнать /epsilon в модели HFSS. Только после этого начинать оптимизировать антенну. Кто-нибудь работал с таким: http://miniradiosolutions.com/54-2/ Стоит брать? Цитата(ScrewDriver @ Dec 5 2016, 10:51) По поводу фильтра - поскольку номиналы элементов соизмеримы с паразитными, он потребует ручного подбора - это 100%. Так же, скорей всего, потери в нем будут такими, что полностью компенсируют выигрыш от улучшенного согласования, а то и перевесят его. Сделайте тестовые отводы на плате на краевые разъемы SMA и покаскадно отрабатывайте - сначала антенну на 50 Ом, потом фильтр на антенну. У меня плата получилась дорогущей из-за нестандартного стека. Я думаю отладить Bluetooth на стандартном стеке, - развести для этого макетку с SMA разъемами: отдельно для антенны и отдельно для микроконтроллера с обвязкой. Правильно я понимаю, что для отладки (согласования) импедансов мне понадобится LCR-meter, а для калибровки антенны(скальпелем) - VNA? Есть какой-либо guide/статья о подобной отладке?