3、国产化RIO:树莓派/RK3399(Linux RT)+FPGA(PCIe通信)+功能模块(AD、DA、传感

3.1、树莓派简介(支持安装NI Linux RT,LabVIEW 2020社区版免费开发)
提到树莓派,估计很多用户都不陌生,近些年,树莓派火起来之后,仅在上海一个地区,一个月的销量就有800W套,可想而知,树莓派之所以这么受大家喜爱,根本原因还是其超高的性价比,即性能强悍,价格低廉,加上开源的Linux系统和全球丰富的软件生态,进一步使其成为我们嵌入式领域的一个中流砥柱。
关于树莓派的详细介绍,大家可以自行百度一下,网上有很多详细的树莓派科普资料和应用案例。下面我们着重给用户介绍一下本书会用到的工业级树莓派CM4。
下面的图片都是来自于淘宝上的店铺,我们在淘宝上搜索工业级树莓派CM4,可以看到这款来自英国的树莓派核心板,有多种配置供大家选择。其中,图9-7是树莓派CM4的核心板高清图片;图9-8是目前主流的4种配置,用户可以根据自己的实际情况进行选择,本书选择的是带Wifi和eMMC(NAND Flash,类似硬盘),4G内存和16G存储;图9-9是英国原装的工业级树莓派CM4开发板,注意,原装的没有外壳;图9-10是树莓派中国合作伙伴设计的外壳,便于直接拿来放在工业场合使用,图9-11是内部结构图。





用户可以自己到淘宝上购买一台工业级树莓派CM4回来,价格不贵,几百元。这款CM4上的CPU核心指标如下图9-12所示,性能十分强悍。其中,CPU采用ARM Cortex-A72,4核,主频高达1.5GHz,6个串口、双路HDMI显示、1路千兆以太网(要是有2路就完美了)。当然,对我们来说,最重要的还是这款CM4支持PCIe 2.0通信,彻底解决了树莓派跟FPGA之间的数据传输带宽和标准化外设驱动问题。

除了树莓派,用户还需要到淘宝上购买一根PCIe转接线,因为市面上带PCIe接口的FPGA开发板基本上都是X2、X4、X8的,而工业级树莓派CM4底板上的PCIe母座是x1接口,虽然YouTube上面有高手用锯子把那个座子卡槽锯开,但是不推荐,很容易弄坏PCIe接口,所以大家可以到网上买一根PCIex1转PCIex8转接线,长度选择20cm及以上比较好,这样什么样的PCIe外设都能接进去了,因为PCIe插槽宽度是向下兼容的。推荐大家购买ADT品牌的PCIe线缆,实物图参考图9-13所示。这里我们一并给出了实验测试并验证通过的淘宝店铺链接:
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.71722e8dh4z8tX&id=605811283257&_u=fkhfk1fb3e0

到这里,相当于我们搞定了国产化cRIO的CPU控制器部分,也就是树莓派CM4,可以直接安装NI的Linux RT系统,并且NI提供了一个免费版的LabVIEW开发软件,也就是LabVIEW 2020社区版,大家可以在NI官网上自行下载,也可以联系我们神电测控获取。
关于如何使用LabVIEW开发Linux RT系统里面的应用程序开发流程,我们会在后面第8节给大家做详细的介绍,并且后续所有的PCIe主机端测试都是基于树莓派里面的Linux RT来进行的,所以Pro5这本书重点都是给用户讲解怎么在树莓派里面通过PCIe总线跟FPGA进行交互。
3.2、带PCIe的FPGA图形化开发(没有看过的用户可以参考Pro4宝典里面的第7~8章)
一旦树莓派CM4跟FPGA打通之后,用户就再也不用在Linux下面写外设驱动了,像NI那样,直接将常用的AD、DA、传感器等外设接到FPGA上即可,由FPGA汇总之后再跟树莓派里面的Linux RT程序进行交互;同时,这个FPGA里面还可以对原始的数据进行高速处理,比如滤波,FFT,数值特征提取等等;FPGA既能起到桥梁的作用,还可以做CPU做不到的事情,一举两得。
因此,如何使用LabVIEW直接编写FPGA芯片上的PCIe程序就显得尤为重要了,好在我们花费了一年半的时间移植开发了基于LabVIEW的My FPGA PCIe/PXIe软件工具包,详细的开发过程参考4000多页的Pro4开发宝典,这里我们就不在介绍了,本书Pro5重点给用户讲解的还是树莓派里面的Linux RT+FPGA PCIe应用程序开发。相当于嵌入式系统里面的RT大脑程序开发。
当我们参考Pro4那本书将FPGA芯片里面的LabVIEW PCIe程序写好之后,并且编译下载到FPGA板子里面,为了方便用户后续调试,建议用户将Pro4里面带PCIe接口通信的FPGA bin文件固化到FPGA板子上的Flash里面,这样板子跟树莓派连接的时候,上电就可以自动加载运行了。另外,由于树莓派的启动速度要比一般的Windows系统快一些,所以在生成bit文件的时候,将SPIx4写到xdc约束网表里面,这样编译出来的bit文件和生成的bin文件在加载的时候,速度非常快,也就是说,FPGA芯片里面的程序加载和运行一定要比树莓派里面的Linux RT开机快一些,不然PCIe是不能被识别的。
3.3、在树莓派Linux环境下,利用gcc编译PCIe驱动ko文件(神电测控,独家提供编译好的PCIe ko驱动文件,不感兴趣的用户,可以跳过此步骤)
当带PCIe的FPGA板子程序烧写好之后,比如本书配套的黑金AX7103开发板,利用PCIex8转成PCIex1线缆接到工业级树莓派CM4上面,如图9-14所示。此时,如果直接上电,树莓派里面的Linux RT是不能直接识别PCIe外设的,我们还需要利用Xillybus官方提供的PCIe C文件和Makefile文件编译出Linux系统下的PCIe驱动.ko文件,然后安装到系统里面才可以;这一点远没有Windows系统简单,Windows系统开机之后,设备管理器里面会出现一个PCIe黄色感叹号,然后直接鼠标右击更新选择浏览找到inf驱动文件加载就可以了!但是Linux系统下的驱动需要自己动手通过Makefile编译生成ko文件,好在Xillybus将Makefile和C文件都免费提供了,所以在后面5.2节里面我们会给大家做详细的讲解。

当然了,如果用户不熟悉Linux系统,可以不用自己编译ko驱动文件,我们已经编译好了,用户直接拿来安装就可以了。如果想借着这个机会熟悉一下Linux基本操作,可以参考后续5.2节走一遍。
当ko驱动安装完成后,重启树莓派,通过lsmod和lspci可以查看FPGA板子是否被树莓派Linux RT识别到,如果没有正常识别,还可以通过grep指令在系统日志里面找到PCIe驱动加载识别的过程,这个后面会有截图。
3.4、在电脑上利用交叉编译器Eclipse编译树莓派Linux RT下的动态链接库SO文件(神电测控独家提供编译好的PCIe动态链接库SO文件,LabVIEW/C/Python均可调用)
当ko驱动安装完成并且能够正常识别到带PCIe的FPGA板子后,接下来就是用C/Python/QT或者LabVIEW开发Linux RT程序了,这个中间会涉及到驱动程序,也就是so文件,相当于Windows下的DLL。LabVIEW调用DLL和SO方法一样,都是通过库函数节点直接调用,写入函数名就可以了。关于Windows下的DLL早在Pro4那本书里面已经给用户做过详细的讲解了。
后面5.3节里面,我们会把Windows下的DLL源文件也就是C文件改造一下,将里面的一些函数替换成Linux系统下的函数,然后利用Eclipse交叉编译把这个C编译成SO文件,最后再通过LabVIEW调用就可以了。详细的步骤我们会在5.3里面给大家讲解。
如果用户不熟悉Eclipse,可以跳过这一步,直接使用我们编译出来的SO文件,即插即用,除了LabVIEW,还可以通过C或者Python或者QT来调用这个SO里面的函数。
3.5、总结:基于树莓派+FPGA的国产化cRIO性能分析和优势(低成本,超高性价比)
当我们搞定了运行Linux RT的树莓派和带PCIe接口的FPGA图形化开发之后,也就相当于变相的实现了类似NI cRIO平台的开发效果,在实际应用中,用户可以根据自己项目和产品的特点进行定制化开发。
相较于NI的cRIO,基于树莓派的Linux RT+PCIe+FPGA的硬件成本要远小于NI的cRIO平台;用户只需要购买通用的树莓派CM4核心板和FPGA核心板,然后模仿着NI的cRIO框架设计自己的硬件平台;并且内置了GPU的CM4核心板主频和性能不输一般的X86 CPU;样机开发阶段,外围的模块可以选择黑金标准的40pin模块,也可以自己开发功能模块或者到网上购买其他家的外设模块;对于需要同时支持LabVIEW直接编程并且具备Linux RT和FPGA的嵌入式开源硬件来说,本书给大家提供的解决方案更加灵活。
意义:希望用户在学习完这本书的内容后,可以将以前想做又没有能力和精力做的idea,用LabVIEW+树莓派Linux RT+PCIe+FPGA快速实现出来,真正做到学以致用!因为我们是成熟方案提供商,有不少企业客户都开发出了属于自己的cRIO平台,如果将树莓派换成国产瑞芯微的RK3399,将Xilinx FPGA换成深圳国微的FPGA,则可以完全实现一台支持LabVIEW直接编程的纯国产化的cRIO开发平台,这个方案目前有不少军工客户采纳实施了,感兴趣的用户可以单独联系我们神电测控,以获取更深层次的沟通交流。关于瑞芯微RK3399下的Linux RT系统移植和程序开发,网上有一些资料可以参考。