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

Вопрос Изменение частоты работы

vspack

New member
Добрый день,
Подскажите, пожалуйста, возможно ли прошивкой изменить частоту работы модуля? Скажем так, немного сдвинуть вниз от 2,4ггц, ну или вверх от 2,5ггц?
 

pvvx

Активный участник сообщества
Добрый день,
Подскажите, пожалуйста, возможно ли прошивкой изменить частоту работы модуля? Скажем так, немного сдвинуть вниз от 2,4ггц, ну или вверх от 2,5ггц?
Да - там есть настройки PLL. Но это пока закрытая инфо.
Модуль при старте всегда подстраивает RF частоты. Есть опция старта без подстроки к текущей температуре и питанию. Тогда часто модуль вообще не соединяется ни с кем или постоянно срывает связь.
Есть и установка частоты кварца. Эти опции находятся в 128 байтах констант в esp_init_data_default.bin. Там-же и установка конфигурации портов I/O и UART при старте модуля с SDK...
 

vspack

New member
Т.е. пока это закрытая информация - то изменить никак? или можно как-то это обойти или открыть эту самую закрытую информацию?
 

pvvx

Активный участник сообщества
Т.е. пока это закрытая информация - то изменить никак? или можно как-то это обойти или открыть эту самую закрытую информацию?
Берете IDA + отладчик и смотрите.
все обращения к управлению WiFi части в основном идут через эти процедуры:
Код:
extern int rom_i2c_writeReg_Mask(int block, int host_id, int reg_add, int Msb, int Lsb, int indata);
extern int rom_i2c_readReg_Mask(int block, int host_id, int reg_add, int Msb, int Lsb);

#define i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata) \
    rom_i2c_writeReg_Mask(block, host_id, reg_add, Msb, Lsb, indata)

#define i2c_readReg_Mask(block, host_id, reg_add, Msb, Lsb) \
    rom_i2c_readReg_Mask_(block, host_id, reg_add, Msb, Lsb)

#define i2c_writeReg_Mask_def(block, reg_add, indata) \
    i2c_writeReg_Mask(block, block##_hostid, reg_add, reg_add##_msb, reg_add##_lsb, indata)

#define i2c_readReg_Mask_def(block, reg_add) \
    i2c_readReg_Mask(block, block##_hostid, reg_add, reg_add##_msb, reg_add##_lsb)
i2c в названии - это не I2C шина :) Это так назвали процедуру....
Передача параметров инициализации (128 байт констант в esp_init_data_default.bin) идет в процедуру register_chipv6_phy(init_data).
init_data - это и есть указатель на esp_init_data_default. Далее уж сами :)

А пока, дальнейшая информация, дается только на обмен адекватной инфы или когда хоть кто-то начнет выкладывать поближе к ней :)
 

vspack

New member
Я бы дал Вам какую-то адекватную инфу, если бы уровень моих познаний и умений был на том, уровне, которым оперируете Вы. А так я скромный начинающий любитель, который только начал разбираться со столь полезным модулем))
 

pvvx

Активный участник сообщества
Есть и такая функция установки частоты каждого канала:
Код:
dw_chl_14       .int 2484               ; DATA XREF: ram_set_channel_freq:loc_40247253r
 dw_chl_1        .int 2412               ; DATA XREF: ram_set_channel_freq:loc_402473C4r
 dw_chl_13       .int 2472               ; DATA XREF: ram_set_channel_freq:loc_402473CAr
 dw_chl_12       .int 2467               ; DATA XREF: ram_set_channel_freq:loc_402473D0r
 dw_chl_11       .int 2462               ; DATA XREF: ram_set_channel_freq:loc_402473D6r
 dw_chl_10       .int 2457               ; DATA XREF: ram_set_channel_freq:loc_402473DCr
 dw_chl_9        .int 2452               ; DATA XREF: ram_set_channel_freq:loc_402473E2r
 dw_chl_8        .int 2447               ; DATA XREF: ram_set_channel_freq:loc_402473E8r
 dw_chl_7        .int 2442               ; DATA XREF: ram_set_channel_freq:loc_402473EEr
 dw_chl_6        .int 2437               ; DATA XREF: ram_set_channel_freq:loc_402473F4r
 dw_chl_5        .int 2432               ; DATA XREF: ram_set_channel_freq:loc_402473FAr
 dw_chl_4        .int 2427               ; DATA XREF: ram_set_channel_freq:loc_40247400r
 dw_chl_3        .int 2422               ; DATA XREF: ram_set_channel_freq:loc_40247406r
 dw_chl_2        .int 2417               ; DATA XREF: ram_set_channel_freq:loc_4024740Cr

 ; =============== S U B R O U T I N E =======================================

 ram_set_channel_freq:                   ; CODE XREF: chip_60_set_channel+5Dj

 ; FUNCTION CHUNK AT .irom0.text:4024745C SIZE 00000091 BYTES
Есть и такая set_rf_freq_offset() (как вы хотели :) ), вызывающая rfpll_reset(), ram_rfpll_set_freq(), write_rfpll_sdm(), wait_rfpll_cal_end(), где в wait_rfpll_cal_end() printf("error: pll_cal exceeds 2ms!!!\n")...
Одно не понятно - зачем что-то менять, если это достаточно сложно ? Вы же пишите: "скромный начинающий любитель" :)
 

vspack

New member
ну может не такой начинающий, но очень скромный, чтобы о своих успехах хвалиться. Зачем нужно - скажем так: в одном месте много интернета, а в другом месте (в 500 метрах) интернета нет. Вот эти два места мы и связываем модульками. Но больно много в диапазоне помех, вот и хочется буквально чуть чуть поправить частоту.
 

pvvx

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