这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【E22P-433MBH-SC无线模块开发测试套件】亿佰特E22P-433MBH

共1条 1/1 1 跳转至

【E22P-433MBH-SC无线模块开发测试套件】亿佰特E22P-433MBH-SC完成贴——E22模组通信收发测试

助工
2026-09-21 17:59:35     打赏

一.描述

本篇是 E22P-433MBH-SC评估套件测评的收尾篇。

开箱贴里留了个问题:只有一套评估板怎么测收发?正好我手上有一块Lora模组于是就有了 STM32F103 + SX1278 LoRa 节点

它和板载 E22P-433M30S(Semtech SX1262)同为 433MHz 频段、LoRa 调制,只要扩频因子、带宽、编码率、同步字对齐,这样就能互通测试了。

二、测试介绍

项目A 端B 端
设备E22P-433MBH-SC 评估板自制Nucleo-STM32F103 + SX1278 模组
射频芯片SX1262(E22P-433M30S)SX1278
主控STM32F103C8T6STM32F103(HAL 工程 SX1278_HAL)
交互0.96 OLED + 三按键USART2 串口打印 + PC13 按键
天线SMA 433MHz 胶棒天线弹簧天线

两端各发 100 包:



  1. E22 发 → SX1278 收:评估板菜单进入 Tx Mode 发射,SX1278 端串口打印每一包;

  2. SX1278 发 → E22 收:按下 SX1278 板上 PC13 按键,连续发 100 包,评估板 OLED 显示接收统计。

三、通信参数一定要设定成一样的

LoRa 对参数极其敏感,两端只要有一项不一致,接收端基本一片死寂。最终对齐的配置:

参数取值说明
频率433.000 MHz433MHz 免费频段
带宽 BW500 kHzSX1278 端 SignalBw = 9
扩频因子 SF11SpreadingFactor = 11
编码率 CR4/5ErrorCoding = 1
CRCON两端都开,否则收端判为错包
报头Explicit 显式ImplicitHeaderOn = false
功率E22 30dBm / SX1278 20dBm大功率端覆盖小功率端
前导/同步字对齐评估板默认值SX1278 端沿用驱动默认

四、SX1278 端程序(SX1278_HAL 工程)

工程基于 STM32CubeMX + HAL,射频驱动是 Semtech sx12xx 驱动(SX1278/radio),SPI2 接 SX1278,USART2 做 printf 打印。

4.1 射频参数

SX1278/radio/sx1276-LoRa.c 中按上表改成与 E22 一致:

#define LoRa_FREQENCY   433000000tLoRaSettings LoRaSettings =
{
    LoRa_FREQENCY ,   // RFFrequency,433MHz 与E22对齐
    20,               // Power dBm
    9,                // SignalBw  9 = 500kHz
    11,               // SpreadingFactor SF11
    1,                // ErrorCoding  1 = 4/5
    true,             // CrcOn
    false,            // ImplicitHeaderOn 显式报头
    0,                // RxSingleOn  0 = 连续接收
    0,                // FreqHopOn
    4,                // HopPeriod
    100,              // TxPacketTimeout
    100,              // RxPacketTimeout
    32,               // PayloadLength};

4.2 上电自检:先确认 SPI 通了

调无线最忌讳"一上来就发",第一步永远是读版本寄存器。Src/main.c 里加了一段自检:

uint8_t regVer = 0, regOpMode = 0;
SX1276Read( 0x42, &regVer );     /* REG_LR_VERSION,正常 0x12 */SX1276Read( 0x01, &regOpMode );  /* REG_LR_OPMODE  */printf("RegVersion(0x42) = 0x%02X\r\n", regVer);printf("RegOpMode  (0x01) = 0x%02X\r\n", regOpMode);

读回 0x12 说明 SPI 时序、片选、复位都正常;读回 0x00 或 0xFF 就是典型的"SPI 没回应",先查接线和 3.3V 供电,别急着改射频参数。程序里还连续多读了 3 次,用来确认 SPI 在高速下稳定。

4.3 接收主循环

Radio = RadioDriverInit( );
Radio->Init( );
Radio->StartRx( );while (1)
{    while( Radio->Process( ) == RF_RX_DONE )   /* 收到一包 */
    {
        Radio->GetRxPacket( px, ( uint16_t* )&BufferSize );        printf("RX(%d bytes): %s\r\n", (unsigned int)BufferSize, px);
        Radio->StartRx( );                     /* 回到连续接收 */
    }
}

Radio->Process() 是驱动的状态机,返回 RF_RX_DONE 时取包,取完必须再次 StartRx(),否则就只收一包停在那儿了。

4.4 按键触发发送 100 包

用 PC13 按键(低电平有效)触发批量发送,payload 为 TX.100.001 … TX.100.100,方便对端统计丢包:

if( HAL_GPIO_ReadPin( KEY_GPIO_Port, KEY_Pin ) == KEY_PRESSED )
{
    HAL_Delay( 20 );                               /* 消抖 */
    for( i = 1; i <= 100; i++ )
    {
        txLen = sprintf( txMsg, "TX.%03d.%03d", 100, i );
        Radio->SetTxPacket( txMsg, txLen + 1 );        while( Radio->Process( ) != RF_TX_DONE );  /* 等本包发完 */
        HAL_Delay( 500 );                          /* 包间隔 500ms */
    }
    Radio->StartRx( );                             /* 发完回到接收 */
    Radio->Process( );
}

每包之间留 500ms,避免对端 OLED 刷新不过来,也让频谱仪/电流表有时间读数。

4.5 发送完成自动变回 RX

实测发现连续发 100 包后偶尔卡在非 RX 状态,所以发送结束加了一次",状态检查,看工作是否正常":

uint8_t ver = 0, opm = 0;
SX1276Read( 0x42, &ver );   /* 正常 0x12 */SX1276Read( 0x01, &opm );   /* RX连续接收 = 0x85 */if( ver == 0x12 && (opm & 0x07) != 0x05 )
{
    SX1276Write( 0x01, (opm & 0xF8) | 0x05 );  /* 强制拉回 RX */
    SX1276Read( 0x01, &opm );
}

串口会打印 TX done, back to RX. Ver=0x12 OpMode=0x85 [module OK, in RX],一眼就能判断模块在位、状态正确。这套"读版本 + 读 OpMode 确定状态的变化。

五、测试环境与过程

桌面环境,两端相距约 1 米(近场,主要验证功能互通与参数正确,距离拉远测试留到后续),两根天线平行放置。

image.png

上电后评估板 OLED 亮起 EBYTE logo,按 OK 键进入主菜单,用 UP/DOWN 选 Tx Mode / Rx Mode 即可切换收发。

image.png

image.png

5.1 测试一:E22 发 → SX1278 收

评估板进 Tx Mode,OLED 显示当前参数与发射计数:SF11 / BW500 / CR4/5、Freq:433MHz、Pour:30dBm、Tx Total:100。

image.png

SX1278 端串口逐包打印,最后一包编号与对端计数一致,说明 100 包全部落地、无丢包:

image.png

5.2 测试二:SX1278 发 → E22 收

按 SX1278 板上 PC13,程序连发 100 包,串口打印 Sent #1: TX.100.001 … 一直到 Sent #100,最后输出 TX done, back to RX. Ver=0x12 OpMode=0x85 [module OK, in RX]。

image.png

评估板 OLED 上能看到实时统计:Total / Current / Lost / RSSI,本次收发 RSSI 约 -2dBm(近场)、丢包为 0。

5.3 接收电流

补充一下之前在过程贴中,没有测试的部分

image.png

六、结果汇总

测试项方向发包数收包数丢包率RSSI
空口互通E22 → SX12781001000%
空口互通SX1278 → E221001000%约 -2dBm

结论:SX1262(E22P-433M30S)与 SX1278 在 433MHz / BW500 / SF11 / CR4-5 / CRC ON / 显式报头下可以稳定互通,双向各 100 包零丢包。

七、总结

  1. 评估板菜单是很方便:Home / Setting / Tx Mode / Rx Mode / Version 五个选项就把参数配置和收发测试做完了,前期验证芯片互通根本不用写代码,一块板 就能进行所有测试。

  2. 参数对齐 > 一切:频率、BW、SF、CR、CRC、报头、同步字七项参数,要不通信简历不了

  3. 先自检再调参:读 0x42 版本很重要。。

  4. 电流测试点方便:板载 TR 测试电阻让功耗评估不用飞线,对电池供电项目很实用。

感谢 EEPW 与亿佰特提供的测评机会。


测试程序.zip



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]