• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE SoC PHY6202

greyfox13

New member
А зачем мне WebBluetooth. Если что-то будет нужно под дроида буду делать. Вот родную PHY+ утилитку пока перевел на английский. А там видно будет. Доков все равно маловато. Где почитать про FLASH MODE и MIRROR MODE? Или у них всё по-умолчанию идет как MIRROR?
 

pvvx

Активный участник сообщества
А зачем мне WebBluetooth. Если что-то будет нужно под дроида буду делать. Вот родную PHY+ утилитку пока перевел на английский. А там видно будет. Доков все равно маловато. Где почитать про FLASH MODE и MIRROR MODE? Или у них всё по-умолчанию идет как MIRROR?
При чем тут "дроид"?
WebBluetooth - это обычный html c js и работает из интернет эксплорера. Писать на js просто, но я просто не успел и пока не было особой нужды.
А как иначе грузить ОТА по WEB? Мучится с установкой массивных пакетов для сборки под андроид или замучить питон под windows для доступа к BLE OTA?
Всё это гораздо сложнее и дольше писать, чем в WebBluetooth.
 

greyfox13

New member
Да, я знаю, только мне не нужно пока собирать информацию с BLE устройств на комп (было нужно, но потом передумал), а вот мобила как центральное устройство самое то. А получать данные по WebBluetooth на мобилу смысла не вижу, т.к. можно это сделать нативным приложением. Будет необходимость, может и займусь. C JS знаком, приходилось когда-то писать.
 

pvvx

Активный участник сообщества
вот мобила как центральное устройство самое то. А получать данные по WebBluetooth на мобилу смысла не вижу, т.к. можно это сделать нативным приложением.
Из WebBluetooth и нативное приложение в Android делается пару командами. :)
 

greyfox13

New member
Не пойму как отключить JTAG. Мне нужны пины которые он использует. В частности на LCD Reset идет GPIO_P01, который является JTAG_TDI, и, судя по всему, он мне после запуска обрезечивает экран.
 

greyfox13

New member
У меня почему-то при засыпании сбрасываются регистры GPIO и FMUX. Потому у меня дисплей и обрезечивается, т.к. спящий режим и сбрасывает и при просыпании значение выхода не восстанавливает. Но это полбеды. Сбрасывается и конфигурация мультиплексора, т.е. если я настроил SPI, то каждый раз при просыпании мне его нужно будет заново настраивать.
В доках настроек спящего режима не описано. Есть функция setSleepMode, но она ничего не дает. Та же ерунда будет и с I2C, ADC и др.
 

pvvx

Активный участник сообщества
У меня почему-то при засыпании сбрасываются регистры GPIO и FMUX. Потому у меня дисплей и обрезечивается, т.к. спящий режим и сбрасывает и при просыпании значение выхода не восстанавливает. Но это полбеды. Сбрасывается и конфигурация мультиплексора, т.е. если я настроил SPI, то каждый раз при просыпании мне его нужно будет заново настраивать.
В доках настроек спящего режима не описано. Есть функция setSleepMode, но она ничего не дает. Та же ерунда будет и с I2C, ADC и др.
Это везде так, во всех чипах BLE. Питание с большей части чипа снимается (часто включая и задающий генератор - кварц). Остаются только "подтяжки" на GPIO, но и их назначение для sleep могут отличатся от режима активности.
А т.к. Cortex обычно имеет тупую периферию и дикий HAL, то это требует множественных действий по её инициализации каждый раз, на что уходит много энергии...
Тут и сказывается как проработан уровень контроллеров в чипе и не всегда более быстрый CPU выигрывает (тот-же Nordic с nRF5 не лучший).
 

pvvx

Активный участник сообщества
Если чип умеет оставлять что-то активным, то ищите процедуру и флаги как это сделать. Но в таких чипах нужно каждый раз после просыпания инициализировать внутренности и перед засыпанием деинициализировать в состояние минимального потребления.
Это принимается по умолчанию и могли даже не писать в документации.
 

greyfox13

New member
Я соглашусь с тем, что оставлять включенным выход может быть энергозатратно (условно говоря), но сколько энергии сожрет сохранение настройки простейшей периферии? Ничто по сравнению с сохранением RAM. Это скорее не фича, это баг.
Вот регистр "DDR" для выводов же сохраняется, почему не сохраняется регистр который управляет включением GPIO0-3, 31-34? Для энергосбережения?
А биты-флаги может и есть, только документация почти нулевая.
 

pvvx

Активный участник сообщества
У SPI (и прочих устройств) же есть:
void hal_spi_init(void)
int hal_spi_bus_init(hal_spi_t* spi_ptr,spi_Cfg_t cfg)
int hal_spi_bus_deinit(hal_spi_t* spi_ptr)
А биты-флаги может и есть, только документация почти нулевая.
А как можно все состояния описать в документации?
По регистрам есть disasm :)
 

pvvx

Активный участник сообщества
Я соглашусь с тем, что оставлять включенным выход может быть энергозатратно (условно говоря), но сколько энергии сожрет сохранение настройки простейшей периферии? Ничто по сравнению с сохранением RAM. Это скорее не фича, это баг.
Возможно это просто не описано в их либах.
В том-же TLSR десятки бит в регистрах по вкл/выкл CLK для каждой малой части контроллеров и плюс такая-же куча бит RESET этих кусочков чипа. Плюс ещё выбор источника тактирования для каждой фигнющки.
Для ADC там более 5-ти блоков и для каждого выбирается тип тактирования и источник :)
Как это всё сохранить в либе, если требуется определенная последовательность включения блоков согласно вашей схеме? Power manager должен запоминать последовательность вашей инициализации?
 

pvvx

Активный участник сообщества
Пример:

Внешнее устройство просыпается при активной “1” на SCL или SDA. Перед обращением к нему вы запрещаете переход в sleep и устанавливаете GPIO подтяжку к “1”. Настраиваете контроллер I2C (включая подачу на него внутреннего CLK). Через тайм-аут (если нужно), переключаете MIX и/или учитываете изменение состояния выходов в инициализации I2C. Далее работаете с шиной I2C. Потом отключаете MIX, оставив подтяжку к “0”. Если требуется, то отключаете внутренний CLK на контроллер I2C. Только после этого разрешаете переход в sleep.

Кто должен производить все эти действия?

API? - Нафиг – оно будет только тормозить и мешать в разных ситуациях.
 

pvvx

Активный участник сообщества
Без осциллографа, PowerProfiler с высокой дискретностью замеров (менее 100 us) и прочих сканерах в BLE делать нечего и лучше вообще не лезть. Иначе не сможете оптимизировать потребление и все переходные этапы.
 

pvvx

Активный участник сообщества
Если будет полнейшее описание то время на его чтение и разбор гораздо больше чем проверить в живую. Как и в случае ковыряния в регистрах через JTAG - пока там разгребете какой бит и куда выскочила программа, уже десять раз можно залить новую программу с debug выводом меток и этапов в текстовом виде... Та и как работать с JTAG если MCU сбрасывается каждые 7 ms ?
 

pvvx

Активный участник сообщества
У PHY есть hal_pwrmgr.
Там назначаются калбаки:
int hal_pwrmgr_register(MODULE_e mod, pwrmgr_Hdl_t sleepHandle, pwrmgr_Hdl_t wakeupHandle)
Впишите на каждое внутренние устройство (включая GPIO) что ван нужно сделать при просыпании/засыпании.
На SPI там вписано:
static void spi0_sleep_handler(void)
{
if(m_spiCtx[0].spi_info != NULL)
hal_spi_bus_deinit(m_spiCtx[0].spi_info);
}
 

greyfox13

New member
Хоть уже не очень актуально, но акселерометр очень похож на SC7A20 от Silan Microelectronics. Распиновка такая же, регистры такие же, и даже WhoAmI = 0x11.
 

Mifody

New member
Подскажите пожалуйста. Я захотел использовать скрипт write_phy6202.py для записи дампа в phy6202. Установил pithon 2.7, Поправил пути в бат файле и номер ком порта. Но при запуске бат файла появляется ошибка: ImportError: No module named serial.
Как я понял, нет модуля serial, который импортируется в начале скрипта write_phy6202.py. Если эту строчку закомментировать, то пишет Error: Open COM1, 115200 baud! Порт рабочий, настроен именно так. В терминале принимает данные именно на этих параметрах исправно. Пробовал другой ком порт, через переходник. То же самое. Подскажите, что я делаю не так? В питоне ничего не делал до этого.
 
Сверху Снизу