将Firefly-RK3288重装板与RockChip RK3288 SoC一起使用 Microchip Digital I2C热传感器-MCP9808

萤火虫-RK3288重新加载


选择开发板进行实验后,选择基于中国制造商T-Chip的相当复杂的模型。 他们以Firefly品牌销售产品。 他们专门研究基于RockChip芯片的系统板。 RK3288是这家中国公司中生产力最高的32位解决方案。 RockChip和Allwinner的SoC与RaspberryPi中的Broadcom芯片相比,不仅具有最佳功能,而且还具有生产技术-28nm和40nm。 但是,当然,在这种情况下,中国人更贵。 RK3399没有选择更陡峭的64位系统,包括因为有理由认为它已经明显更热。 尽管RK3288在负载下不是很热,即使不使用任何散热器也是如此。

产品页面 。 该设备的主要硬件参数:4核ARM Cortex-A17 1.8 GHz(一些消息来源坚持认为它是Cortex-A12或A15,但这并不特别重要),2 GB DDR3双通道,16 GB eMMC驱动器,千兆位以太网。

一般视图

我是在Ebay上购买的,几乎是可以向俄罗斯订购这些板的唯一地方。 中国萤火虫本身的在线商店不会发送给俄罗斯。 没有发送到俄罗斯和Indiegogo。 有趣的是,在要发送的国家/地区列表中,这些陌生人据说甚至具有不存在的状态:)。 来自Ebay的卖家发送了一个配置良好的电路板-电路板,电源(您需要12V 1.5A,应以2A的余量发送),带天线的围巾,带有紧固件的情况的丙烯酸板。 该适配器适用于美国出口,但每个人都应拥有一个远足适配器:)。

像在俄罗斯市场上广为人知的CubieTech的CubieBoard主板一样,Firefly也提供了良好的信息支持。 提供了操作系统映像,引脚图等。 适用于Firefly的Ubuntu 14固件值得赞扬。 它工作稳定,内存消耗低。 图形桌面-LXDE。 界面的呈现似乎并不完美,但是相当不错。 顺便说一句,有关如何在LXDE中获取屏幕截图的有用链接: Lxde wiki 。 其他有用的信息是如何设置时间: 使用dpkg-reconfigure tzdata 。 是的,您永远都不会猜到在任何Linux Shell中以非平凡的方式完成了什么。



该板具有三明治结构(三明治样式)。 核心板包含SoC RockChip,RAM和三星驱动器,Realtek的以太网以及有源电源和监视芯片。 主板包含其他所有内容:Lontium HDMI输出控制器(仅两个输出),Toshiba HDMI输入,JMicron USB-SATA桥,用于无线接口的Ampak芯片。 两部分通过相对标准的MXM3.0插槽(移动PCI Express模块​​)连接。 该开发板具有许多接口,以及四个主要的引脚块,共184个引脚。 而且,制造商没有限制母连接器,因为即使将几条12V电源线都离婚了,这肯定更安全。

引导模式和固件


与主板有关的第一件事是将它们刷新。 如果偶尔需要与开发板,物联网等进行交互,则在计算机上安装Linux系统更为方便。 对于所有第26版,我通常都使用Linux Fedora 64位。 将开发板置于启动模式并刷新OS映像的官方说明: Flash Image

由于RockChip的upgrade_tool fill实用程序需要安装依赖项 。 并非主机PC上的Linux发行版的每个版本都会说明哪个版本。
我想分享我的操作算法,以成功地将板转移到启动并填充OS映像:

1.  . 2.     ( micro USB - USB). 3.        : -     RECOVER -   RESET -      RECOVER 4.  -   Linux Upgrade Tool (     ): - [user@nb-linuxfedora data-arm]$ unzip Linux_Upgrade_Tool_v1.24.zip - [user@nb-linuxfedora data-arm]$ cd Linux_Upgrade_Tool_v1.24/ - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ sudo mv upgrade_tool /usr/local/bin/ - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ sudo chown root:root /usr/local/bin/upgrade_tool - [user@nb-linuxfedora Linux_Upgrade_Tool_v1.24]$ cd /usr/local/bin/ - [user@nb-linuxfedora bin]$ -  ,    upgrade_tool      5.  Linux Upgrade Tool   <update>.img   (         ): [user@nb-linuxfedora bin]# sudo upgrade_tool -  ,       ,      Fedora,    .   Fedora 26       . ,   : libudev.so.1, libstdc++.so.6.          Linux    ,   Fedora : [user@linux]# dnf install libudev.so.1 installing: libcap-2.25-5.fc26.i686.rpm libgpg-error-1.25-2.fc26.i686.rpm xz-libs-5.2.3-2.fc26.i686.rpm systemd-libs-233-6.fc26.i686.rpm libgcc-7.2.1-2.fc26.i686.rpm libselinux-2.6-7.fc26.i686.rpm lz4-libs-1.8.0-1.fc26.i686.rpm libgcrypt-1.7.8-1.fc26.i686.rpm libsepol-2.6-2.fc26.i686.rpm pcre-8.41-1.fc26.i686.rpm [user@linux]# dnf install libstdc++.so.6 installing: libstdc++.i686 7.2.1-2.fc26   -   : [user@nb-linuxfedora bin]# sudo upgrade_tool : List of rockusb connected DevNo=1 Vid=0x2207,Pid=0x320a,LocationID=302 Loader Found 1 rockusb,Select input DevNo,Rescan press <R>,Quit press <Q>:1  "1"      .    uf. Rockusb>uf Firefly-RK3288-Reload_DualBoot_201612101121.img : Loading firmware... Support Type:RK32 FW Ver:5.0.00 FW Time:2016-12-10 11:21:47 Loader ver:2.30 Loader Time:2016-10-13 10:04:54 ( ...) Upgrade firmware ok. Rockusb>q 

使用方法


Firefly-RK3288重新加载固件成功后,断开USB电缆的连接。 您可以连接显示器,键盘,鼠标。 并单独安装g ++编译器。 适用于Firefly的Ubuntu LXDE有一套很好的软件,其数量最少。 当然,在这种情况下最有用的是终端。 还有一个简单的系统监视器,Leafpad文本编辑器,屏幕键盘,文件管理器,媒体播放器,Chromium浏览器等。

几个屏幕截图:

图片
终端和叶子板
图片
版本信息
美中不足的是,当然不能没有。 评估板在内部以全高清图像分辨率工作,并且屏幕快照以相同的分辨率保存。 但是在HDMI输出上,只有高清就绪分辨率的图像被馈送到监视器。 因此,图像当然不够清晰。 但是,这样的照片将有助于实验。

图片
对于RK3288来说,几张高质量的电影不是问题,CPU利用率约为50%。

使用I2C外设和GPIO引脚


这种板卡最有价值的功能之一可能是使用GPIO和其他接口通过I2C总线连接外围设备。 Firefly RK3288 Reload具有4条I2C总线,甚至5条,但零总线用于开发板的内部需求,其他4条(从1到4)与用户离婚。

网络具有有关使用I2C接口的足够的常规信息。 要通过终端与I2C设备进行交互,我推荐这篇文章: “使用Lubuntu在Cubieboard上进行I2C” ,它们在那里使用了“多维数据集”,但这并不重要。

对于使用I2C总线的文件虚拟化以编程方式连接到I2C外设,我们可以建议这样做: “与I2C设备接口”
作为外围设备I2C,使用了Microchip温度传感器MCP9808。 在制造商的网站上,很容易找到该设备的良好规格。 这是市场上质量最高,最昂贵的传感器之一,比TI和NXP LM系列传感器明显更快,更准确。

图片

我使用了已经焊接到迷你板CJMCU-9808的传感器。 Ebay的所有功能-传感器和杜邦接线-都无需焊接。 连接非常简单:VCC-3.3V电源,GND-接地,SCL和SDA实际上实现了I2C总线(分别是时钟线和数据),引脚A0 A1 A2指定了I2C设备7位地址的一部分,ALERT原则上不能使用,但警报线仍将进一步介入。 在照片中,温度传感器连接到I2C 1总线,所有地址触点都接地,这意味着相应地址位为逻辑0,如果地址接线插入3.3V电源,则该位为逻辑1。MCP9808芯片的基址为b0011,并且进一步A2 A1 A0。 在这种情况下,只有7位-b0011000,即十六进制-0x18。

因此,控制台实用程序将产生:

 root@firefly:/home/firefly# i2cdetect -y -r 1 0 1 2 3 4 5 6 7 8 9 abcdef 00: -- -- -- -- -- -- -- -- -- -- -- -- UU 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 

可以看出,在I2C总线号1上有一个地址为0x18的东西。

致电:
根@ firefly:/ home / firefly#i2cget -y 1 0x18 0x05 w
例如:0xbc01(表示27.75 C)。

i2cget程序的参数:1-总线号; 0x18-连接到设备总线的地址; 0x05-寄存器地址(在这种情况下为温度); w-表示寄存器存储2个字节。

当然,您可以从自己的C ++程序更充分地使用MCP9808。 请记住,温度寄存器0xbc01的内容是反转的,即可以表示为0x01bc。 第一个字节0x01包含警报原因的三位,符号的一位和温度的四高位。 第二个字节0xbc包含温度的低八位。 Microchip使用二进制补码格式对温度寄存器的内容进行编码。 双字节寄存器的第十二位编码一个字符。 如果为0,则温度为正。 如果第11位为1,则需要将所计算的环境温度加2到7摄氏度-2 ^ 7(128 C),如果-等于0,则-不需要添加任何东西。 同样,第十位中的1将加2 ^ 6(64 C)。 依此类推,第四位的1将加2 ^ 0(1 C)。 第三位中的1将增加2 ^ -1(0.5 C)。 最后一位-零位将加2 ^ -4(0.0625 C)。 如果符号(12th)的位为1,则问题出在房子里,温度为负。 并且寄存器的解密有些复杂。 根据二进制补码格式的原理,必须首先将这些位反转。 然后,您需要在使用最少的位上加一个,因为 负值不是用0编码,而是用-1编码。 默认情况下,配置温度传感器时,将使用最大精度-最高为0.0625C。在这种情况下,您需要在最后一位上加上一个,这代表0.0625C。即, 您只需在温度寄存器值上加1即可。 例如,如果要提高速度,请使用配置寄存器降低温度测量的精度。 然后,在负温度下,您需要在较旧的位上加一个,或添加一个与此位相对应的数字。 然后,必须以与肯定情况相同的方式将这些位转换为温度值。

GPIO和警报线


图片图片

您可以使用传感器的警报线。 包括使用Firefly的GPIO线之一。 在照片中,当然可以使用古旧的LED和电阻来锡和燃烧,但是在此原理本身很重要。 Habré上的另一篇文章很好地描述了如何使用GPIO: Linux:按钮,LED和GPIO 。 但是,正如正确指出的那样,很难确定要导出哪个Gpio编号以供将来使用。 为了查看Gpio的哪些行繁忙,哪些不繁忙,可以使用以下命令:

 root@firefly:/home/firefly# cat /sys/kernel/debug/gpio > /home/firefly/_temp/temp 

团队

 firefly@firefly:~$ dmesg 

还显示有关Gpio的信息。

研究表明,可以导出例如GPIO引脚号262。这在板子上和规范中以GPIO8 A6表示。 因为 像往常一样,在该电路板上,GPIO块每个包含32个元素。 可以假设魔术公式是这样的:32 * GPIO块号+后缀号。 这样,我们就可以得到32 * 8 + 6 =262。现在,在程序开始时,我们可以为此Gpio 262提供3.3V电源,退出时,请停止这样做。

MCP9808的规范表明其警报线是开漏的,即 公开库存。 这意味着当发生警报时,该线将接地,否则不会短路。 还强调了使用电阻器的需要。 在实践中,已证实这确实是必要的,否则,随着电流的通过,传感器的内部将被加热到高温。 下图显示在照片中:GPIO串联连接到LED,传感器的电阻,漏极开路(ALARM)。 仍然可以使用配置寄存器MCP9808来设置允许的温度限制。 当超出此范围时,将发生警报。 您可以将温度设置为两个级别,将温度设置为一个级别。 通常,要使用此数字传感器,当然,您需要仔细阅读规格,切换到配置模式,返回工作模式等等。 因此,当温度超过设定的极限时,电流将流过ALARM触点并点亮LED。

总结


我想提到一个有用的技巧,用于控制开发板上内置的LED的发光。 Cubieboard 6的手册显示了如何打开LED1:

 $echo default-on > /sys/class/leds/led1-GPIOB9/trigger 

以及如何关闭LED1:

 $echo none > /sys/class/leds/led1-GPIOB9/trigger 

基于此,发现了如何控制Firefly 3288 Reload中的LED。
打开黄色的定制LED(实际上是蓝色LED):

 root@firefly:/home/firefly# echo default-on > /sys/class/leds/firefly:yellow:user/trigger 

禁用此LED:

 root@firefly:/home/firefly# echo none > /sys/class/leds/firefly:yellow:user/trigger 

注意事项


在设计开发板时,请务必谨慎。 当然,编码是在PC上进行的,它也充满了渴望和交叉编译。 然后,将源代码编译到特定目标上,或者将现成的可执行文件传输到板上。 并且如果专门制造的板主要用于使用各种接口。 是的,它们通常不是很昂贵。 在昂贵的PC本身上,不建议尝试使用I2C总线,GPIO线等。 这可能导致令人不愉快的计算机故障。 至少以i2cget之类的控制台实用程序明确警告这一点,以损坏笔记本电脑的某些型号为例。

Source: https://habr.com/ru/post/zh-CN412763/


All Articles