Skip to content
This repository has been archived by the owner on Jun 28, 2020. It is now read-only.

mrengineer/KaijaSensor

Repository files navigation

KaijaSensor

Actual code for Keil STM32L151

07.04.14.

  • Сделан буффер для обмена между UARTs DEBUG и WIFI. Теперь символы не теряются.
  • Перешел на модуль WIFI от STM
  • Сделал распознавание значения переменной wifi_state от модуля
  • Сделал периодический опрос этой переменной. Теперь я знаю подключен я к WIFI точке или нет
  • Сделал запрос страницы с временем.

TODO:

  • Установить время. Выставить период запроса времени длиннее после успешной установки времени
  • Пропинговаться на сервере - что датчик online

11.04.14

  • Обнаружил ошибку установки года в RTC. Исправил заменив код от STM на пример в регистрах.
  • Сделал установку даты и времени с сервера.

TODO

  • Проследить что дата и время ставятся корректно с первого разаю
  • Сделать пинговку на сервер

27.04.14

  • Обнаружил что не запускается Delay, исправил. Надо SysTick инициализировать после rtc
  • Обнаружил, что есть проблема чтения с карточки - программа повисает, т.к. в примере чтения через DMA ошибка. Поправил.
  • Почти сделал пинговку на сервер
  • Дата и время ставятся корректно
  • Начал пилить передачу данных на сервер через POST
  • Сделал enum режимов работы датчика
  • Сделал команды управления через DEBUG

TODO

  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера

04.05.14

  • В пинговке приходит число команд которое есть для устройства. Выставляется флаг Потом запрашиваются команды если есть флаг (иначе будет мешанина, сразу просить нельзя)
  • Убил на сервере добавление команд в базу из UI (перезаписал файл). Надо восстановить.

TODO

  • Команды надо теперь получать (начал писать получение), записать на флеш, а серверу сказать, чтобы эти команды больше не слал.
  • Сделать обработку команд
  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера

26.05.14

  1. WIFI модуль сильно греется! Его обязательно надо выключать!
  2. Странно приходят команды. Через строку. Битые. Разбираюсь. В браузере сервер отдает команды верно.

12.06.2014

  • Команды приходят хорошо. При пинге отсылается MODE - режим работы
  • Сделал запуск калибровки фильтра с сервера, перевод в IDLE и OPERATION режимы
  • Сделал чтобы команда могла выполняться параллельно, т.е. через main. Добавил timeout на выполнение и отправку результата на сервер
  • Перевел передачу данных - RTC, команды - на теги вида
  • Сделал запрос на пинговку от сервера командой чтобы по началу выполнения команды и окончании не только обновлять статус команды на сервере, но и статус самого устройства (MODE)

TODO

  • Считывание файла с карты. См команду LOG
  • Запись на карту полученных данных
  • SLEEP для проца пока ему нечего делать
  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера
  • WIFI модуль сильно греется! Его обязательно надо выключать!

06/07/14

  • Добавил таймаут, который работает как Delay от тамера cnt_timer. В него считаются миллисекунды с момента power-on
  • Сделал отправку крупных файлов на сервер. Но ее еще надо отработать - узнать максимальный размер файлов, сделать чтобы отправлялись все помеченные файлы и т.д.
  • Сделал считывание файла с карты. Был прикол с удалением \n из \r\n при считывании и подсчете длинны файла
  • Сделал запись на карту полученных данных

TODO

  • Завершить работу над отправкой файлов на сервер
  • SLEEP для проца пока ему нечего делать
  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера
  • WIFI модуль сильно греется! Его обязательно надо выключать!

21/07/14

  • Отработал отправку крупных файлов на сервер. Теперь все файлы с именем *.TS (TO SEND)последовательно отправляются на червер через POST. Сервер отвечает, и файл переменуется в *.ST (SENT)
  • При получении данных в СОКЕТ теперь это определяется через WIND (см доки на модуль)
  • Обновил FW в модуле
  • Повысил скорость связи с модулем до 230400
  • Начал писать перебор точек WIFI

TODO

  • Модуль все еще слишком медленно отправляет данные, дохнет при закачке в него больших буфферов данных. Надо сотрудничать с ST
  • SLEEP для проца пока ему нечего делать
  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера
  • WIFI модуль сильно греется! Его обязательно надо выключать!

24/07/14

  • Сделан новый прототип, прошитю. В нем есть ключ отключения SD и WIFI.
  • Сделана работа от батарейки 3.6В LI
  • При записи файлов большого объема глюкает FATFS, выпадают символы. Сделал запись по 256 байт кусками, вроде работает. Но надо еще погонять.

TODO

  • Модуль все еще слишком медленно отправляет данные, дохнет при закачке в него больших буфферов данных. Надо сотрудничать с ST
  • SLEEP для проца пока ему нечего делать
  • Допилить пинговку на сервер. Должны отдавться данные о том сколько Кб свежих данных есть
  • Сделать список точек доступа и их перебор при включении WIFI
  • Сделать загрузку настроек с сервера
  • WIFI модуль сильно греется! Его обязательно надо выключать!

06/10/14

  • Пробовал ускорить запись. Пока максимум 80-100 кб/с SDIO Unnamed 2GB uSD. FAT16 стандартный размер кластера Писал 20433 байт частями по 512 байт, затем открывал файл заново. Если писать блоками больше, то могут пропадать символы. FAT32 512 байт дал запись аж 1 секунду для 20433 байт, это около 53 кб/сек. FAT32 1024 байт, скорость записи оталась та же.

NRF24L01. Либа для платформы F4 будучи преределанной под другой проц требует не только допиливания по регистрам, но и по процедуре SPI. Вместо 8 бит по факту всеравно идут 16 бит. Иправляет ситуацию только использование библиотечной отправки без проверки бита занятоcти приемника. NRF24L01 капризен по питанию. Например может принимать но не передавать или наоборот. Так от батарейи литий 3.6 все работало ок, а от стабилизатора 3.3 и 3.0 толи не принимало толи не посылало.


15/06/15 Внедрил Bootloader openBLT. Для этого,

  • Сместил начало программы
  • В reset handler в .s добавил LDR R3, =sfe(CSTACK) MOV SP, R3
  • чтобы отлаживаться без bootloader, пришлось в начало программы добавить NVIC_SetVectorTable

30.06.15 Сделал скачивание прошивки. Но только скорость записи на SD маловата - 10 кб. И после скачивания пустые данные какие-то запрашиваюся. Левак.

В скачаной прошивке лищние \r\n в конце.


31.01.15 Сделана новая плата с STM32F151. Переношу туда код. Делаю по-новой в keil Код генерирую в CubeMX, но SDIO+FATFS не начал работать. Перешел на знакомый STM32F407 на плате дискавери. Проверил SDIO+FATFS старым кодом в IAR. Работает. Значит железо норм, карточка Apacher 1Gb норм. Всеравно селал подтяжки к питанию на линиях. Сгенерировал код в CUBE под F4. Не заработал - не выполняется инициализация диска, выпадает hardfault.

Нашел что stack надо увеличить до 800 и heap до 400. В keil это делается в .s файле. Сделал. Всеравно не работает, хотя hardfail ушел. Нашел что в hal проблема с cmd 55 http://forum.easyelectronics.ru/viewtopic.php?f=35&t=14469&start=75 В SD_PowerON закомментировал эту команду. Проц считает что инициализация прошла, но f_mkfs не происходит


02.02.16 Отдал платы Борису. Сам делаю на втором протоипе с stm32F4 и проверенным на старом коде подключением карточки. Включил pull-up в проце на все линии. НЕотложенный mount отрабатывает даже с непогашенным cmd 55 в SD_PowerON

После проработки. Заработала запись файла на карточку после полного (не только заголовочной области) форматирования карточки. Параметры форматирования были FAT, кластер - стандартный размер кластера, не 32 кб!. Карта 2 Гб uSD noName. Подведем итог. Подтяжки. Stack+heap, правильное форматирование карточки.

f_mkfs по-прежнему выпадает в FR_DISK_ERR for (n = 1; n < n_fat; n++) { /* This loop may take a time on FAT32 volume due to many single sector writes */ if (disk_write(pdrv, tbl, wsect++, 1) != RES_OK) return FR_DISK_ERR; }

На карте 8GB smarto все работает так же. Но у нее уже форматирование FAT32 32кб кластер.

И еще. Строка hsd.Init.ClockDiv = 40;. Это делитель частоты SDIO. Если что-то не работает - повышай сначала его.


07.02.16 Важное замечание: магнитным датчикам на входе нужен пулап или пулдаун. Иначе их не посадить на EXTI, т.к. при отключенном питании датчиков входы МК будут постоянно будут колбаситься. Но! Важно! В норме датчики закрытия крышки и установки на форму будут подмагничены и выдавать GND. А датчики срабатывания будут давать Vdd т.к. обыно будут не подмагничены (такие сигналы дают эти датчики, см даташит murata) Поэтому одни датчики надо подтянуть к питанию другие к земле чтобы уменьшить утечки тока.


17.02.16 Проводился эксперимент по установлению минимального напряжения питания при котором работает uSD на коде, сгенерированном Cube. Оговора связана с тем, что в коде передается команда, сообщающая карте, что напряжение питания 2.7В

Железо - DiscoveryF4 с STM32F4. Подключена карта к SDIO, без внешних подтяжек. Карта памяти noname 2GB. Форматирована на компьютере, кластер установлен "стандартный", форматирование только заголовочной области. Делитель частоты тактирования SDIO hsd.Init.ClockDiv = 50; Питание от лабораторного источника, подключено к выводу платы VDD (на +3В не работает). Т.е. питание МК и карты одинаковое. Код программы подключает драйвер, сразу же монтирует ее, форматирует карту, открывает файл, пишет строку, закрывает, отключает драйвер ФАТ

УСТАНОВЛЕНО: При питании свыше или равно 2,7В код выполняется успешно. При питании менее 2,7 В форматирование повреждает заголовок, после этого карта не монтируется даже при напряжении более 2,7В. Приходится форматировать на компьютере. Соответственно, файл тоже не пишется.


18.02.16 Поправил код под ST32L151 на плате rev1. На ней поднял напряжение с DC-DC TPS62560 с 2.5в до 2.7в, т.к. карточка на 2,5 не работает. Сделал это путем замены резистора 560 кОм на 364 кОм на делители преобразователя. В коде сделал сначала включение DC-DC, затем подачу питания через транзистор. Потом ожидание. И только после этого инициализацию FAT. Все работает включая форматирование карты.

2016/03/06

  • Сделана библиотека для работы с аккселерометром.
  • Начата работа над модулем управления питанием и измерения энергопотребления.

2016/03/12

Опробовал режим SLEEP. Проц уходит в reset по выходу из режима по причине прерывания systick. На F4 работает правильно, возможно, ошибка в проце. Плюс выход из этого режима требует 7 мс. Решил использовать standby, но он эквивалентен перезапуску процессора. Поэтому остановился на режиме STOP как на наиболее энергоэкономичном. Важные замечания: пробуждения по RTC wakeup. Для его работы в MX_RTC_Init должно быть HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); Без HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); не заработает. И чтобы не просыпаться по SYSTICK перед входом в сон SYSTICK надо SUSPEND.

About

Actual code for Keil STM32L151

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages