• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE SoC PHY6202

cool2000

Member
Перед сравнением результат всегда приводится к большей разрядности.
Литералы кажется всегда int со знаком или без.
 

cool2000

Member
The integer promotion rules say that any integer type narrower than int which appears as an operand of + is promoted to int (not unsigned int).
 

pvvx

Активный участник сообщества
Тогда второй вопрос - зачем adds ? Почему не add?
 

cool2000

Member
Ну так там int ota_adr_index, а здесь uint16_t pkt_index
pvvx написал(а):
Тогда второй вопрос - зачем adds ? Почему не add?
В данном случае это не важно. Разница только в том, что adds дополнительно выставляет флаги. Насколько я понимаю, gcc, использует add только для операций с индексными регистрами, стеком, счётчиком команд.
 

pvvx

Активный участник сообщества
Т.е. чтобы больше погонять заряды в CPU и увеличить потребление. Понятно.
 

pvvx

Активный участник сообщества
До нормального кодогенератора там далеко...
В общем осталась только эта опшибка... Скоро испытаю OTA, т.к. накалякал-дописал js для текущей версии OTA с id "РНY6"...
 

pvvx

Активный участник сообщества
hal_flash_write() и потом hal_flash_read() не работает - читает старый кэш.
Команда AP_PCR->CACHE_BYPASS = 0; и прочие (вставлял и WaitMs(20) - не помогают.
Остальное, если убрать проверку записи - работает (не пока не выкладывал)
То что я там накрутил в js, пригодится?
да, наверняка пригодится, когда буду раскрашивать...
 

cool2000

Member
Команда AP_PCR->CACHE_BYPASS = 0;
Вроде вот такая должна быть последовательность:
C:
    AP_CACHE->CTRL0 = 0x02;
    AP_PCR->CACHE_RST = 0x02;
    AP_PCR->CACHE_BYPASS = 1;
Defines из SDK:
C:
#define HAL_CACHE_ENTER_BYPASS_SECTION()  do{ \
        HAL_ENTER_CRITICAL_SECTION();\
        AP_CACHE->CTRL0 = 0x02; \
        AP_PCR->CACHE_RST = 0x02;\
        AP_PCR->CACHE_BYPASS = 1;    \
        HAL_EXIT_CRITICAL_SECTION();\
    }while(0);
#define HAL_CACHE_EXIT_BYPASS_SECTION()  do{ \
        HAL_ENTER_CRITICAL_SECTION();\
        AP_CACHE->CTRL0 = 0x00;\
        AP_PCR->CACHE_RST = 0x03;\
        AP_PCR->CACHE_BYPASS = 0;\
        HAL_EXIT_CRITICAL_SECTION();\
    }while(0);
 

pvvx

Активный участник сообщества
См. hal_flash_read() -> если записать AP_PCR->CACHE_BYPASS=0 отрабатывает ваши команды.
Фиг его знает - может он ещё запись кэширует....

Работает так - если чип заснул, то кэш XIP обновляется гарантированно. Надо немного поменять алгоритм - проверять CRC32 на всю запись OTA в конце, по команде CMD_OTA_END.
 

pvvx

Активный участник сообщества
Запись проходит без проблем.
Лог с проверкой после каждого блока что говорят переменные ota, но без проверки записи каждого кусочка (16 байт):
Код:
Старт DFU
OTA send: 00ff
OTA read: ver: 01, err: 0, dbg: 0, start: 0, offs: 0x11010020, idx: 0x0010, total: 0x0011, crc: 0xC012FD5E
OTA send: 01ff20000111504859361200
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0xFFFF, total: 0x0012, crc: 0xC012FD5E
OTA send: 0000504859360100000020000111100100004388
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0000, total: 0x0012, crc: 0x557AB31D
OTA send: 010020010000f00000002000011100000000440b
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0001, total: 0x0012, crc: 0xD52EEB28
OTA send: 020000000000000000000000000000000000d05c
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0002, total: 0x0012, crc: 0x04517BB9
OTA send: 03000000000000000000000000000000000081a0
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0003, total: 0x0012, crc: 0xD28B9AE6
OTA send: 04000000000000000000000000000000000030d5
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0004, total: 0x0012, crc: 0x5E306857
OTA send: 0500000000000000000000000000000000006129
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0005, total: 0x0012, crc: 0xE0ADC600
OTA send: 060000000000000000000000000000000000916d
OTA read: ver: 01, err: 0, dbg: 0, start: 1, offs: 0x11010020, idx: 0x0006, total: 0x0012, crc: 0xF1F2471C
...
Потом читается всё ok.
 

pvvx

Активный участник сообщества
Тормоз ещё тот:
Код:
29:29: Поиск устройств
29:31: Connecting to: BTH01-31BDBC
29:31: OTA: FF010100200001111100120050485936E5394CC0
29:31: DevCfg: 000000001F501D000206B400
29:31: Устройство подключено.
29:33: Файл:
29:33: PHY6 OTA ID: 36594850, Сегментов: 1, Старт: 0x11010000, Размер: 20304 байт
29:33: Размер файла: 20308 байт
29:33: Счетчик: 1270
29:46: Старт программирования...
31:56: Программирование завершено за 129.404 секунд
Интервал соединения 30 ms (поставил по рекомендациям Огрызков (Apple) - кратное 15 ms)
1705714658275.png
Порядок среднего тока ~0.45 мА
Стирание сектора:
1705714689880.png
В TLSR825x - интервал 20 ms но OTA во много раз быстрее, хотя CPU там полный тормоз с очень мелкой кэш XIP. (Ср.ток 1 мА)
 

pvvx

Активный участник сообщества
Походу вроде всё с OTA. Есть загрузка без параметров (т.е. всё по умолчанию) и с заданием всех параметров...

Нужен новый ota_app_phy62x2.ld, который должен линковать всё в один бинарник с заголовками.
Заголовок – это app_info_t. За ним следует таблица сегментов app_info_seg_t. Далее, включая заголовок и таблицу сегментов - это скорее всего сегмент кода XIP. Затем сегменты данных.
Адрес записи APP_OTA – 0x11010000. В исходниках всё описано... Пользовательские инструкции - потом, после раскраски имеющегося...
Запустить Boot_OTA из APP_OTA можно путем записи в спец. регистр и софт-перезагрузке.
Если записали какую ерунду вместо APP_OTA – держим кнопку и включаем питание – запустится Boot_OTA.
 

pvvx

Активный участник сообщества
@cool2000 - пора раскрашивать...
OTA работает, минимальный набор функций настроек тоже работает, но не нарисованы в html.
Ошибки в js в загрузке файла оставил (не исправлял) - дублирует при повторе...
Вылечил скорость OTA - теперь около 1 килобайта в сек.
 
Сверху Снизу