@hongZ 2025-05-30 11:02 采纳率: 0%
浏览 29

RTL8189WIFI模块移植

hi,你好:
看到你那个移植RTL8189WIFI模块的文章,我最近也自己在移植,貌似也遇到了电压的问题。
不知道是不是跟你一样,我来描述一下:
买的正点原子的模块,VDDIO接了3.3V,整个模块的SDIO和数字IO工作在3.3V了:

img

但是我的开发板的SDIO和GPIO输出高都是1.8V的(万用表测的),所以我怀疑是电压差异的原因。

我这边的报错:

img

你那边的情况是否跟我一样呢,然后具体是怎么解决的呢?
我这边做软件的,由于这个移植是自己娱乐,没有硬件的帮忙。

期待回复~

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-05-30 11:03
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你好!根据你的描述,确实可能是因为电压不匹配导致的问题。以下是对问题的分析以及解决方案:

    问题分析

    1. 电压差异

      • 你的开发板的SDIO和GPIO输出高电平为1.8V。
      • 正点原子的RTL8189模块的VDDIO接了3.3V,意味着模块的SDIO和数字IO需要3.3V的信号。
    2. 可能导致的错误

      • 当模块的输入信号低于其逻辑门限电压时,可能会导致通信失败或不稳定。
      • 这种情况在嵌入式系统中比较常见,尤其是在不同电压域之间进行通信时。

    解决方案

    以下是几种可能的解决方案,你可以根据实际情况选择适合的方法:

    方法一:修改开发板的输出电压

    1. 调整开发板的电源管理芯片

      • 如果开发板支持调整SDIO和GPIO的电压,可以尝试将它们的电压设置为3.3V。
      • 需要查看开发板的硬件设计文档,找到相关电源管理芯片(如PMIC)的配置方法。
    2. 使用电平转换器

      • 如果开发板无法直接调整电压,可以使用电平转换器(如TXB0104、74LVC1T45等)来将1.8V信号转换为3.3V信号。
      • 示例电路:
        开发板 GPIO/SDIO -----> 电平转换器 -----> RTL8189 GPIO/SDIO
        

    方法二:检查模块的引脚配置

    1. 确认模块的VDDIO设置

      • 检查模块的VDDIO引脚是否正确连接到了3.3V。
      • 如果模块支持多种电压配置(如通过电阻分压或跳线设置),确保其配置正确。
    2. 尝试强制模块使用1.8V模式

      • 如果模块支持1.8V模式,可以通过修改固件或配置文件,让模块适配1.8V信号。
      • 具体方法需参考模块的数据手册。

    方法三:调试软件层面

    1. 增加延时或降低频率

      • 如果电压差异不是特别严重,可以通过增加通信延时或降低通信频率来提高稳定性。
      • 在代码中调整相关的参数,例如:
        // 增加延时
        HAL_Delay(5); // 延时5ms
        
        // 降低通信频率
        SDIO_CLK_DIV = SDIO_CLK_DIV | 0x0F; // 设置更低的时钟频率
        
    2. 检查驱动程序配置

      • 确保驱动程序中的电压配置与实际硬件一致。
      • 如果使用的是Linux内核驱动,可以检查sdio_host的相关配置。

    方法四:更换模块或开发板

    1. 使用支持1.8V的模块

      • 如果开发板无法更改电压,可以选择一个支持1.8V的WiFi模块(如ESP8266)。
    2. 更换支持3.3V的开发板

      • 如果模块必须使用3.3V信号,可以考虑更换一块支持3.3V的开发板。

    示例代码:电平转换器配置

    如果你选择了使用电平转换器,以下是一个简单的示例代码,用于初始化电平转换器:

    // 初始化电平转换器
    void Init_Level_Shifter(void) {
        // 启用电平转换器
        GPIO_InitTypeDef GPIO_InitStruct = {0};
    
        __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
        GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; // 假设使用PA0和PA1作为转换通道
        GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 开漏模式
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
    

    总结

    根据你的描述,最可能的原因是电压不匹配导致的通信问题。建议优先尝试调整开发板的电压或使用电平转换器。如果这些方法不可行,再考虑其他方案。

    希望以上内容对你有所帮助!如果还有疑问,请随时补充说明。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月30日