查看: 1469|回复: 2

[原创] 【MCX-A153分享】基于RT-Thread的硬件IIC驱动适配

[复制链接]
  • TA的每日心情
    奋斗
    2024-12-9 14:23
  • 签到天数: 204 天

    连续签到: 1 天

    [LV.7]常住居民III

    7

    主题

    567

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1143
    最后登录
    2025-3-12
    发表于 2024-7-21 16:46:12 | 显示全部楼层 |阅读模式


    目前RT-Thread Studio尚未支持恩智浦FRDM-MCXA153开发板BSP,需要从gitee下载最新的主线,通过scons命令创建工程。下载好主线源码后,在rt-thread\bsp\nxp\mcx\mcxa\frdm-mcxa153 目录下打开scons环境,配置IIC驱动和SSD1306 OLED。

    一、IIC配置
    恩智浦FRDM-MCXA153开发板板载的mikroBUS socket预留一个IIC接口,具体可以从针脚图看到,下图红框处的针脚。
    1532.png


    NXP引入了一个Flexcomm概念,每个Flexcomm接口可通过软件选择作为USART、SPI或I2C接口。此处只需要在menuconfig中选择I2C0即可。

    1534.png

    因为FRDM-MCXA153的BSP目前只有pin和Uart的驱动,需要增加drv_i2c.c文件,直接从已有的BSP(如N947)拷贝过来,同时修改baud、clock_attach_id、clock_div_name初始化值。
    1535.png


    再修改pin mux的配置,首先在BOARD_InitPins函数中增加I2C0 reset实现:

    1. RESET_ReleasePeripheralReset(kLPI2C0_RST_SHIFT_RSTn);
    复制代码


    同时加上I2C0的SDA/SCL针脚初始化代码:
    1. const port_pin_config_t port3_27_pin34_config = {/* Internal pull-up resistor is enabled */  
    2.           kPORT_PullUp,  
    3.            /* Low internal pull resistor value is selected. */  
    4.            kPORT_LowPullResistor,  
    5.            /* Fast slew rate is configured */  
    6.            kPORT_FastSlewRate,  
    7.            /* Passive input filter is disabled */  
    8.            kPORT_PassiveFilterDisable,  
    9.            /* Open drain output is enabled */  
    10.            kPORT_OpenDrainEnable,  
    11.            /* Low drive strength is configured */  
    12.            kPORT_LowDriveStrength,  
    13.            /* Normal drive strength is configured */  
    14.            kPORT_NormalDriveStrength,  
    15.            /* Pin is configured as LPI2C0_SCL */  
    16.            kPORT_MuxAlt2,  
    17.            /* Digital input enabled */  
    18.            kPORT_InputBufferEnable,  
    19.            /* Digital input is not inverted */  
    20.            kPORT_InputNormal,  
    21.            /* Pin Control Register fields [15:0] are not locked */  
    22.            kPORT_UnlockRegister};  
    23.     /* PORT3_27 (pin 34) is configured as LPI2C0_SCL */  
    24.     PORT_SetPinConfig(PORT3, 27U, &port3_27_pin34_config);  
    25.     const port_pin_config_t port3_28_pin33_config = {/* Internal pull-up resistor is enabled */  
    26.            kPORT_PullUp,  
    27.            /* Low internal pull resistor value is selected. */  
    28.            kPORT_LowPullResistor,  
    29.            /* Fast slew rate is configured */  
    30.            kPORT_FastSlewRate,  
    31.            /* Passive input filter is disabled */  
    32.            kPORT_PassiveFilterDisable,  
    33.            /* Open drain output is enabled */  
    34.            kPORT_OpenDrainEnable,  
    35.            /* Low drive strength is configured */  
    36.            kPORT_LowDriveStrength,  
    37.            /* Normal drive strength is configured */  
    38.            kPORT_NormalDriveStrength,  
    39.            /* Pin is configured as LPI2C0_SDA */  
    40.            kPORT_MuxAlt2,  
    41.            /* Digital input enabled */  
    42.            kPORT_InputBufferEnable,  
    43.            /* Digital input is not inverted */  
    44.            kPORT_InputNormal,  
    45.            /* Pin Control Register fields [15:0] are not locked */  
    46.            kPORT_UnlockRegister};  
    47.     /* PORT3_28 (pin 33) is configured as LPI2C0_SDA */  
    48.     PORT_SetPinConfig(PORT3, 28U, &port3_28_pin33_config);
    复制代码



    二、SSD1306 OLED配置
    在menuconfig中选择enable SSD1306,并且设置好I2C bus name,I2C的地址默认是0x3c无需修改。
    1536.png


    上述内容设置好之后,选择保存。分别执行下述2个命令:
    pkgs —update
    scons —target=mdk5

    待Keil工程生成后,打开工程编译程序。
    1. Program Size: Code=79916 RO-data=24408 RW-data=768 ZI-data=7700  
    2. Finished: 0 information, 2 warning and 0 error messages.
    3. ".\build\rtthread.axf" - 0 Error(s), 2 Warning(s).
    4. Build Time Elapsed:  00:00:12
    复制代码



    然后下载到恩智浦FRDM-MCXA153开发板上。



    三、硬件IIC测试
    固件下载完成后,reset系统,还是熟悉的味道。


    1. \ | /
    2. - RT -     Thread Operating System
    3. / | \     5.2.0 build Jul 17 2024 23:16:53
    4. 2006 - 2024 Copyright by RT-Thread team
    5. I/I2C: I2C bus [i2c0] registered
    6. using armclang, version: 6180002
    7. MCXA153 HelloWorld
    8. msh >
    复制代码

    list device后,可以看到IIC已经起来:

    1. msh >list device
    2. device           type         ref count
    3. -------- -------------------- ----------
    4. i2c0     I2C Bus              0
    5. pin      Pin Device           0
    6. uart0    Character Device     2
    7. msh >
    复制代码


    因为之前在menuconfig选择ssd1306的时候同时选择了demo,跑起来。

    1538.jpg

    至此,基于RT-Thread的硬件IIC驱动适配完成。



    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2025-2-21 12:40
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    11

    主题

    1632

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3642
    最后登录
    2025-7-26
    发表于 2024-7-21 17:28:24 | 显示全部楼层
    rt-thread/bsp/nxp/mcx/mcxa/frdm-mcxa153/   RTT有支持吧,不过支持到啥程度就得自己拿板子玩了
    ~~~~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-12-9 14:23
  • 签到天数: 204 天

    连续签到: 1 天

    [LV.7]常住居民III

    7

    主题

    567

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1143
    最后登录
    2025-3-12
     楼主| 发表于 2024-7-21 17:53:19 | 显示全部楼层
    oxlm 发表于 2024-7-21 17:28
    rt-thread/bsp/nxp/mcx/mcxa/frdm-mcxa153/   RTT有支持吧,不过支持到啥程度就得自己拿板子玩了 ...

    只有 pin和UART
    没有IIC
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-27 17:47 , Processed in 0.085753 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表