MSTAR芯片的I2C引脚配置详解
本文介绍了MSTAR芯片Pin脚的多种用途,包括作为GPIO、SAR口、UART/SPI/SD口和I2C口等,并详细解释了如何在软件中配置这些功能。
芯片的pin脚可以用作不同的功能,总结一句就是外设进行状态和数据交换。
- 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;
// 如LED,屏的电源,背光的开关,功放的静音等等。除了控制设置之外,还需要和外部设置传输数据。 - pin作为GPIO设置为IN时,是获取外设的高低来判断外设的状态,最常用的一些source通道的detect,及一些wakeup功能。
- pin作为SAR口,获取ADC值;// 如按键板,参照"mstar平台SAR口使用"
- pin作为UART / SPI /SD口;
- 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
浙公网安备 33010602011771号