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

CH582M (СH581, CH582, СH583)

r_o_m_k_a

New member
Скорее всего Д18 не тянет, а принимает только модуляцию несущей создаваемую передатчиком...
Нужен диод покруче. У меня была с 1984 года коробка Д405Б, а у них Fраб до 10ГГц и они не горят даже в диком СВЧ излучении...
Да, вы правы, Д18 не так подробно показывает, но понять моменты передачи можно.

RigolDS6.png
 

dzanis

Member
Сделал небольшой тест производительности чипов CH582 и CH592 . Код просто дёргает ножку,осциллографом замерял частоту пина.

C:
#include "CH58x_common.h"
//#include "CH59x_common.h"   

 __HIGH_CODE
 __attribute__((noinline))
void Main_Circulation()
{
    while(1)
    {
        R32_PB_OUT ^= GPIO_Pin_4;
    }
}

int main()
{
    SetSysClock(CLK_SOURCE_PLL_80MHz);
    GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);
    Main_Circulation();
}
Эти данные наглядно показывают разницу между выполнением кода из быстрой оперативной памяти (SRAM) и медленной Flash-памяти.

Результаты тестирования скорости GPIO (Toggle Speed)

Режим выполнения кодаЧастота ядра (SysClock)CH582 CH592
RAM (__HIGH_CODE)32 MHz2.0 MHz1.78 MHz
60 MHz3.7 MHz3.3 MHz
80 MHz5.0 MHzxxx (Не работает)
Flash (Обычный)Любая680 KHz680 KHz

Ключевые выводы :

  1. "Стена памяти" (Memory Wall):
    Результат 680 KHz при работе из Flash подтверждает, что без предвыборки (prefetch) и кэширования Flash-память является узким местом. Ядро простаивает большую часть времени, ожидая инструкции. Скорость упирается в физический предел чтения Flash, а не в частоту процессора.
  2. Линейное масштабирование в RAM:
    При работе из RAM (__HIGH_CODE) скорость переключения пина растет почти линейно с частотой процессора (от 2 МГц до 5 МГц). Здесь нет задержек на чтение инструкций, работает чистая скорость ядра.
  3. Разница между CH582 и CH592:
    Интересное наблюдение: CH592 работает чуть медленнее (примерно на ~10-12%), чем CH582 на той же частоте при выполнении кода из RAM.
    • 32 MHz: 1.78 vs 2.0 (разница ~11%)
    • 60 MHz: 3.3 vs 3.7 (разница ~11%)
      Возможно, у CH592 немного другая организация шины или задержки доступа к периферии (GPIO), даже если ядро то же самое.
  4. Предел CH592:
    Отметка xxx на 80 МГц для CH592 подтверждает, что этот чип официально (и часто физически) не рассчитан на такие частоты, в отличие от 582.
 

pvvx

Активный участник сообщества
CH592F, RAM(__HIGH_CODE), CLK_SOURCE_PLL_60MHz: 3.750 MHz (R8_FLASH_CFG безразличен)
 

pvvx

Активный участник сообщества
CH592F, Flash, CLK_SOURCE_PLL_60MHz, CLK_SOURCE_PLL_48MHz, CLK_SOURCE_PLL_32MHz: R8_FLASH_CFG = 0x51 -> 1.0 MHz
Зависимости от PLL нет.
 

pvvx

Активный участник сообщества
CH592F UART Log
Код:
Start @ChipID=90
SysClock: 60000 kHz
RAM   SysTick: 655377 720919
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
RAM   SysTick: 655371 720917
FLASH SysTick: 4980788 4980800
C:
#include "CH59x_common.h"

#define InitSysTickCnt() { SysTick->CTLR = 5; }   // one tick = SYSCLK
#define GetSysTickCnt()  ((uint32_t)SysTick->CNT) // one tick = SYSCLK

__HIGH_CODE
__attribute__((noinline))
void Main_CirculationRAM(void)
{
   uint32_t cnt, tt, tt1, tt2;
   cnt = 0x10000;
   tt = GetSysTickCnt();
   while(cnt--)
   {
       __nop();
       __nop();
       __nop();
       __nop();
       __nop();
   }
   tt1 = GetSysTickCnt() - tt;
   cnt = 0x10000;
   tt = GetSysTickCnt();
   while(cnt--)
   {
       R32_PB_OUT ^= GPIO_Pin_4;
   }
   tt2 = GetSysTickCnt() - tt;
   PRINT("RAM   SysTick: %u %u\n", tt1, tt2);
}


__attribute__((noinline))
void Main_CirculationFlash(void)
{
   uint32_t cnt, tt, tt1, tt2;
   InitSysTickCnt();
   GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);
   cnt = 0x10000;
   tt = GetSysTickCnt();
   while(cnt--)
   {
       __nop();
       __nop();
       __nop();
       __nop();
       __nop();
   }
   tt1 = GetSysTickCnt() - tt;
   cnt = 0x10000;
   tt = GetSysTickCnt();
   while(cnt--)
   {
       R32_PB_OUT ^= GPIO_Pin_4;
   }
   tt2 = GetSysTickCnt() - tt;
   PRINT("FLASH SysTick: %u %u\n", tt1, tt2);
}

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    PWR_DCDCCfg(ENABLE);
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
    PRINT("Start @ChipID=%02x\n", R8_CHIP_ID);
    PRINT("SysClock: %u kHz\n", GetSysClock()/1000);
    DelayMs(200);
    InitSysTickCnt();
    GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);
    while(1) {
        Main_CirculationRAM();
        Main_CirculationFlash();
    }
}
 

dzanis

Member
Спасибо за отзывчивость и подтверждение данных.
Flash-память в CH5xx — это безнадежное бутылочное горлышко. 690 KHz или 1 МГц — это слишком низкий потолок, который ставит крест на попытках использовать эти чипы для чего-либо, требующего линейной скорости исполнения.
И, к сожалению, это лишь вершина айсберга:
Стек BLE обложен закрытыми бинарными либами и использует крайне тяжёлый, запутанный C-код, что превращает отладку и модификацию в мучение.
У них по сути мёртвые репозитории на GitHub, а кодировка файлов в SDK кривая, что не добавляет желания с этим работать.
До последнего времени у CH5xx был только один неоспоримый плюс цена, которая исторически держалась у доллара.
Но, похоже, и эта фора закончилась. Если на AliExpress CH582 теперь стоит дороже, чем поддерживаемый ESP32-C3 ( Luatos ), то вся логика выбора этой платформы рушится. Исчезновение ценового преимущества полностью меняет расстановку сил.
 

pvvx

Активный участник сообщества
Спасибо за отзывчивость и подтверждение данных.
Flash-память в CH5xx — это безнадежное бутылочное горлышко. 690 KHz или 1 МГц — это слишком низкий потолок, который ставит крест на попытках использовать эти чипы для чего-либо, требующего линейной скорости исполнения.
И, к сожалению, это лишь вершина айсберга:
Стек BLE обложен закрытыми бинарными либами и использует крайне тяжёлый, запутанный C-код, что превращает отладку и модификацию в мучение.
У них по сути мёртвые репозитории на GitHub, а кодировка файлов в SDK кривая, что не добавляет желания с этим работать.
До последнего времени у CH5xx был только один неоспоримый плюс цена, которая исторически держалась у доллара.
Но, похоже, и эта фора закончилась. Если на AliExpress CH582 теперь стоит дороже, чем поддерживаемый ESP32-C3 ( Luatos ), то вся логика выбора этой платформы рушится. Исчезновение ценового преимущества полностью меняет расстановку сил.
У ESP32-C3 совсем другое потребление. Никакие ESP не годятся для батарейных устройств. И у ESP нет даже нормального USB и типового I2C хотя-бы с CLK до 2MHz...
Так что своя ниша у CH58x и CH592 есть. В BLE и Zigbee производительность CPU не нужна. Там за глаза типа 16 МГц CortexM0.
И при этом ни один ESP не успевает за этими козявками в BLE.
Другая специфика - другой метод написания программ. Видимо вам он не подходит.
 

pvvx

Активный участник сообщества
Примерно так кушают эти чипы: https://esp8266.ru/forum/threads/ch582m-sh581-ch582-sh583.6371/post-89887
Т.е. пиковый ток в пределе до 10 мА, а sleep 1..5 в зависимости от задач во сне.
И где такой ESP взять (?), если у ESP32-C3 только приемник RF кушает за 80 мА, а о TX лучше молчать...
 
Сверху Снизу