Bruceou 发表于 2024-8-27 23:06

【匠芯创D133CBS】基于RT-Thread的I2C使用(OLED)

<div class='showpostmsg'><div>&nbsp;</div>

<div><strong>开发环境:</strong></div>

<div>开发板:D133CBV-QFN88-V1-2 开发板</div>

<div>MCU:D133CBS</div>

<div>D133CBS有3路硬件I2C,但是笔者开发的是软件I2C,默认使用的I2C1的接口,对于应用而言,软件和硬件都是一样的。</div>

<h1>1 RT-Thread 的I2C简介</h1>

<div>I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA(serial data),另一根是双向时钟线 SCL(serial clock)。</div>

<div>I2C 总线允许同时有多个主设备存在,每个连接到总线上的器件都有唯一的地址,主设备启动数据传输并产生时钟信号,从设备被主设备寻址,同一时刻只允许有一个主设备。如下图所示。</div>

<div></div>

<div>Figure 1-1 I2C 总线</div>

<div>一般情况下 MCU 的 I2C 器件都是作为主机和从机通讯,在 RT-Thread 中将 I2C 主机虚拟为 I2C总线设备,I2C 从机通过 I2C 设备接口和 I2C 总线通讯,相关接口如下所示:</div>

<div>Table 1-1 I2C相关接口</div>

<table border="1">
        <tbody>
                <tr>
                        <td>函数</td>
                        <td>描述</td>
                </tr>
                <tr>
                        <td>rt_device_find()</td>
                        <td>根据 I2C 总线设备名称查找设备获取设备句柄</td>
                </tr>
                <tr>
                        <td>rt_i2c_transfer()</td>
                        <td>传输数据</td>
                </tr>
        </tbody>
</table>

<div>关于I2C更详细的内容,请参看官方手册:</div>

<div><a href="https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c" target="_blank">https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/i2c/i2c</a></div>

<h1>2 I2C硬件接口</h1>

<div>本文将使用I2C点亮OELD,值得注意的是OLED接口一般有两种:I2C(4线)和SPI(7线或8线)。笔者这里使用的是I2C0。</div>

<div>I2C0的硬件接口如下。</div>

<div></div>

<div>I2C0所用的GPIO对应:PD0-&gt;SCL, PD1-&gt;SDA</div>

<h1>3 I2C使用实例</h1>

<div>I2C使用起来很简单。这里的从设备使用OLED。</div>

<div>1.首先根据 I2C 设备名称查找 I2C 名称,获取设备句柄,然后初始化设备。</div>

<div>2.其次就是与设备进行通信。</div>

<div>接下来就是配置相应的驱动。</div>

<div>首先配置软件I2C。</div>

<div></div>

<div>Figure 2-1 I2C配置</div>

<div>使能I2C接口,一般默认即可。</div>

<div>接下来就是配置OLED驱动。</div>

<div></div>

<div>Figure 2-3 配置OLED驱动</div>

<div>笔者这里使用的SSD1306的软件包。</div>

<div></div>

<div>Figure 2-4 SSD1306参数配置</div>

<div>以上参数默认即可,笔者这里还使用了SSD1306的sample。</div>

<div>最后保存更新软件包即可。</div>

<div></div>

<div>编译下载,然后在终端输入&ldquo;ssd1306_TestAll&rdquo;即可进行测试。</div>

<div>正常情况下,OLED将会点亮。</div>

<div></div>

<div>完整演示视频如下:</div>

<div>0c31188417305f3be15de3f85e2a49a4<br />
&nbsp;</div>

<div>&nbsp;</div>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【匠芯创D133CBS】基于RT-Thread的I2C使用(OLED)