Page 1 of 1

7231N SDK开发 打开禁用的RX2

Posted: 2023年 Dec 31日 16:58
by tuyauser

如何打开被禁用的rx2,让模组能够使用rx2接收数据


Re: 7231N SDK开发 打开禁用的RX2

Posted: 2024年 Jan 2日 14:50
by yangjie

BK7231N 的 RX2 被用作了 RF 校准使用,上电 RX2 为低的时候会进入 RF 自动校准模式。
所以如果你需要使用 RX2 ,需要确保上电时 RX2 不会处于拉低状态。
如何修改 RX2 作为普通uart 使用,在 vendor/func/bk7011_cal/bk7231N_cal.c 文件中的 rwnx_cal_load_user_rfcali_mode() 函数中,等待 rx2 作为输入 IO 读取结束之后,重新初始化 RX2,TX2 即可。示例代码如下:

Code: Select all

UINT32 rwnx_cal_load_user_rfcali_mode(int *rfcali_mode)
{
    #define RF_MODE_GPIO_ID                 (GPIO1)
    #define RF_MODE_AUTOCALI_GPIO_LEVEL     (0)
    #define RF_MODE_MANULCALI_GPIO_LEVEL    (1)
    UINT32 gpio_level, second_func, ret, mode = 0, txpwr_state;
    GLOBAL_INT_DECLARATION();
    GLOBAL_INT_DISABLE();
    /* checking RX of UART2 */
    bk_gpio_config_input_pup(RF_MODE_GPIO_ID);
    txpwr_state = manual_cal_txpwr_tab_ready_in_flash();

gpio_level = bk_gpio_input(RF_MODE_GPIO_ID);

// 重新初始化 UART2

second_func = GFUNC_MODE_UART2;
gpio_ctrl(CMD_GPIO_ENABLE_SECOND, &second_func);
GLOBAL_INT_RESTORE();

如果你还需要使用 rx2 的中断输入功能,还需要注释 vendor/driver/uart/uart_bk.c 文件的 void uart2_isr(void) 内的 uart_read_fifo_frame(UART2_PORT, uart[UART2_PORT].rx); 。使用 rx2 的中断输入功能示例如下:

Code: Select all

void uart2_isr(void)
{
#if CFG_UART_DEBUG_COMMAND_LINE
    UINT32 status;
    UINT32 intr_en;
    UINT32 intr_status;
    intr_en = REG_READ(REG_UART2_INTR_ENABLE);
    intr_status = REG_READ(REG_UART2_INTR_STATUS);
    REG_WRITE(REG_UART2_INTR_STATUS, intr_status);
    status = intr_status & intr_en;

if(status & (RX_FIFO_NEED_READ_STA | UART_RX_STOP_END_STA))
{
// #if (!CFG_SUPPORT_RTT)
// 	uart_read_fifo_frame(UART2_PORT, uart[UART2_PORT].rx);
// #endif

...

Re: 7231N SDK开发 打开禁用的RX2

Posted: 2024年 Jan 31日 21:52
by tuyauser

RX2 被用作了 RF 校准使用,上电 RX2 为低的时候会进入 RF 自动校准模式。进入校准模式后就不能当普通串口接收数据使用了吗


Re: 7231N SDK开发 打开禁用的RX2

Posted: 2024年 Feb 1日 09:28
by yangjie
tuyauser 2024年 Jan 31日 21:52

RX2 被用作了 RF 校准使用,上电 RX2 为低的时候会进入 RF 自动校准模式。进入校准模式后就不能当普通串口接收数据使用了吗

可以用做普通串口使用的,在 vendor/func/bk7011_cal/bk7231N_cal.c 文件中的 rwnx_cal_load_user_rfcali_mode() 函数内使用 RX2 读取 IO 高低电平之后就可正常使用该 GPIO 了。再次之前对这个 io 进行操作,会在执行到 rwnx_cal_load_user_rfcali_mode() 时将 RX2 脚初始化为 gpio 输入使用,导致在此之前的配置无用。所以需要在 RX2 读取 IO 高低电平之后进行操作