xhackerustc 发表于 2024-5-3 16:31

[FireBeetle 2 ESP32C6开发板] i2c_tools初尝试

<div class='showpostmsg'> 本帖最后由 xhackerustc 于 2024-5-3 16:38 编辑

<p>据esp32c6 datasheet,芯片有两个i2c控制器,即分别在主系统和低功耗系统各有一个 I2C 控制器。其中主系统中的i2c控制器既然可以做master又可以做slave,FIFO有32字节;低功耗系统中的i2c控制器只能当master使用,fifo缩减为16字节。除此以外是基本一样的,尤其对于软件编程来说区别并不大。此次i2c测评以主系统的i2c控制器为对象。</p>

<p>&nbsp;</p>

<p>笔者惯例芯片/板子i2c bring up并不是一上来就写代码的,而是利用i2c-tools这套工具集先测试基本读写没问题后才写成代码。巧的是esp-idf也有类似工具(由此可以看出esp的软件生态确实做得不错)。</p>

<p>&nbsp;</p>

<p><strong>i2c_tools的配置</strong></p>

<pre>
<code class="language-bash">examples/peripherals/i2c/i2c_tools
idf.py set-target esp32c6
idf.py menuconfig</code></pre>

<p>由FireBeetle 2板子原理图可知GPIO19和GPIO20可分别用作SDA和SCL引脚,不过也不是非要用GPIO19和GPIO20,因为对于像i2c这样的慢速设备,esp32c6可利用gpio交换矩阵把i2c的信号通过任意gpio引出,但是板子原理图相当于做了一次信号引脚分配,且引脚丝印印好就跟着用不费脑<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/pleased.gif" width="48" />。笔者的配置如下图所示(注:i2c_tools也支持运行时通过i2cconfig命令改SDA和SCL引脚)</p>

<div style="text-align: center;"></div>

<p>笔者还同时把store command history in flash禁用了没啥意义。</p>

<p>&nbsp;</p>

<p><strong>i2c_tools编译&amp;烧录</strong></p>

<pre>
<code class="language-bash">idf.py build
esptool.py -p /dev/ttyACM0 -b 460800 --before default_reset --after hard_reset --chip esp32c6 --no-stub write_flash --flash_mode qio --flash_size 4MB --flash_freq 80m 0x10000 build/i2c_tools.bin</code></pre>

<p>&nbsp;</p>

<p><strong>i2c_tools初尝试</strong></p>

<p>测试用的是max30102的模块,用杜邦线把它VIN/SDA/SCL/GND引脚和板子对应引脚接好后,板子上电。</p>

<p>发现i2c_tools是个命令行,&ldquo;help&rdquo;命令把所有支持的命令参数都显示出来了</p>

<div style="text-align: center;"></div>

<div style="text-align: center;"></div>

<p>检测下看看能否探测到slave设备:</p>

<div style="text-align: center;"></div>

<p>Nice在0x57探测到了一个i2c slave设备,0x57也确实是这个max30102模组的芯片地址。据max30102 datasheet,0xfe和0xff两个寄存器分别对应REV_ID和PARTID,是只读寄存器,读取看看</p>

<div style="text-align: center;"></div>

<p>i2c slave读取成功!现在可以测试写了,根据max30102 datasheet,enable温度sensor再读取:</p>

<div style="text-align: center;"></div>

<p>以上数据显示温度大概是0x17+0x0d*0.0625 =&nbsp;23.8125摄氏度</p>
</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>

lugl4313820 发表于 2024-5-3 19:24

<p><strong>i2c_tools初尝试,这个工具挺强呀!</strong></p>

xhackerustc 发表于 2024-5-3 21:19

lugl4313820 发表于 2024-5-3 19:24
i2c_tools初尝试,这个工具挺强呀!

<p>i2c-tools这套工具很有用,通常i2c设备(比如一些sensor、PMIC等等)bring up时不写代码,用i2c-tools读写跑通基本功能后,最后才写完整代码的</p>

lugl4313820 发表于 2024-5-4 07:38

xhackerustc 发表于 2024-5-3 21:19
i2c-tools这套工具很有用,通常i2c设备(比如一些sensor、PMIC等等)bring up时不写代码,用i2c-tools读写 ...

<p>感谢感谢呀,我以后在linux上面也学着用一下,这样的工具真好。</p>

chejm 发表于 2024-5-4 11:32

<p>感谢楼主分享的技术内容,希望自己在今后的项目中能用到楼主提供的工具和方法</p>
页: [1]
查看完整版本: [FireBeetle 2 ESP32C6开发板] i2c_tools初尝试