MSTAR芯片的I2C引脚配置详解

本文介绍了MSTAR芯片Pin脚的多种用途,包括作为GPIO、SAR口、UART/SPI/SD口和I2C口等,并详细解释了如何在软件中配置这些功能。

芯片的pin脚可以用作不同的功能,总结一句就是外设进行状态和数据交换。

  1. 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;
    // 如LED,屏的电源,背光的开关,功放的静音等等。除了控制设置之外,还需要和外部设置传输数据。
  2. pin作为GPIO设置为IN时,是获取外设的高低来判断外设的状态,最常用的一些source通道的detect,及一些wakeup功能。
  3. pin作为SAR口,获取ADC值;// 如按键板,参照"mstar平台SAR口使用"
  4. pin作为UART / SPI /SD口;
  5. pin作为I2C口;

一般来说,大部分有特殊功能的Pin脚其实都可以作为GPIO使用,但是当我们将其配置成特殊功能后,就不能同时配为GPIO。
所以当我们发现某个Pin脚我们想将其配成GPIO后,却没办法改变它的高低状态时,就要留意一下该Pin脚是否已经被误配为特殊功能了,这时就需要我们先DISABLE掉这个特殊功能之后,才能设置成GPIO及其状态设定。每个chip有对应一个init GPIO配置,BD_MST{$Board}.h, drvpadconf.c.

标准GPIO口配置

总共时钟状态

#define GPIO_NONE             0    // Not GPIO pin (default)
#define GPIO_IN               1    // GPI
#define GPIO_OUT_LOW          2    // GPO output low
#define GPIO_OUT_HIGH         3    // GPO output high

特殊口配置

1. uart口配置

特殊功能的pin需要在BD_MST{$Board}.h中配置。

#define DISABLE               0
#define ENABLE                1

#define CONFIG_PADMUX_MODE0 0x00
#define CONFIG_PADMUX_MODE1 0x01
#define CONFIG_PADMUX_MODE2 0x02
#define CONFIG_PADMUX_MODE3 0x03
#define CONFIG_PADMUX_MODE4 0x04
#define CONFIG_PADMUX_MODE5 0x05
#define CONFIG_PADMUX_MODE6 0x06
#define CONFIG_PADMUX_MODE7 0x07
#define CONFIG_PADMUX_MODE8 0x08
#define CONFIG_PADMUX_MODE9 0x09
#define CONFIG_PADMUX_UNKNOWN 0xFF

例如UART3,UART4配置成了CONFIG_PADMUX_MODE1,其实也就是ENABLE。接着在drvPadConf.c文件中设置寄存器值。

#ifdef PADS_UART3_MODE
    #if (PADS_UART3_MODE != CONFIG_PADMUX_UNKNOWN)
    #define _CONFIG_UART3_MODE  ((PADS_UART3_MODE == CONFIG_PADMUX_MODE1) ? BIT2 : \
                                 (PADS_UART3_MODE == CONFIG_PADMUX_MODE2) ? BIT3 : \
                                 (PADS_UART3_MODE == CONFIG_PADMUX_MODE3) ? (BIT3 | BIT2) : 0)
    #endif
#endif

#ifdef PADS_UART4_MODE
    #if (PADS_UART4_MODE != CONFIG_PADMUX_UNKNOWN)
    #define _CONFIG_UART4_MODE  ((PADS_UART4_MODE == CONFIG_PADMUX_MODE1) ? BIT6 : \
                                 (PADS_UART4_MODE == CONFIG_PADMUX_MODE2) ? BIT7 : \
                                 (PADS_UART4_MODE == CONFIG_PADMUX_MODE3) ? (BIT7 | BIT6) : 0)
    #endif
#endif

针对UART3,UART4设置了寄存器0x1e05的bit2,0x1e04的bit6。这样就配置完成了。

2. I2C总线功能配置

下面我们以I2C为例:

I2C的clk,data脚分别连接在AD16、AD17引脚上,这两个引脚是复用功能的。所以我们需要disable掉其特殊功能LED/tcon。在BD_MST160D_AH.h文件中配置:

#define PADS_LED_MODE               DISABLE        //Option: ENABLE / DISABLE
#define PADS_I2S_OUT_1              ENABLE         //Option: ENABLE / DISABLE
#define PADS_I2S_OUT_2              ENABLE         //Option: ENABLE / DISABLE
#define PADS_ET_MODE                DISABLE        //Option: DISABLE(PAD_I2C_OUT Mode) / ENABLE
#define PADS_LED_MODE               DISABLE        //Option: CONFIG_PADMUX_MODE1 / CONFIG_PAD
#define PADS_VSYNC_LIKE             DISABLE        //Option: ENABLE / DISABLE
#define PADS_LD_SPI1                DISABLE        //Option: ENABLE / DISABLE
#define PADS_LD_SPI2                DISABLE        //Option: ENABLE / DISABLE
#define PADS_LD_SPI3                DISABLE        //Option: ENABLE / DISABLE
#define PADS_DIM_MODE               DISABLE        //Option: ENABLE / DISABLE

Tcon[11],Tcon[12], 未找到,属于备用的引脚。

寄存器设置

#ifdef PADS_LED_MODE
    #if (PADS_LED_MODE != CONFIG_PADMUX_UNKNOWN)
    #define _CONFIG_LED_MODE    ((PADS_LED_MODE == ENABLE) ? BIT4 : 0)
    _RVM(0x1eb4, _CONFIG_LED_MODE, BIT4),
#endif

I2C引脚配置完成后,还需要在软件中初始化对应的I2C控制器,设置时钟速率,一般标准模式为100Kbps,快速模式为400Kbps。

在实际硬件设计中,需要注意I2C总线上拉电阻的选择,一般使用4.7KΩ上拉到3.3V,保证信号电平的稳定性。同时在PCB布线时,I2C的两根信号线需要尽量等长,远离高频干扰源,避免出现通信错误。


如果有需要,我们可以提供资源

  • 闲置MST6M182XDT -Z1芯片(项目剩余)
  • 完整开发代码及资料
  • 硬件设计参考方案

联系方式:1_8_9_2_9_3_1_2_8_6_4

posted @ 2026-07-04 23:56  lejianz  阅读(1)  评论(0)    收藏  举报