。arm怎么给fpga传数据呢
FPGA的地址映射到ARM空间后,能够直接写寄存器,或者经过DMA传送。DDR没用过。FPGA的IP核对linux而言就像普通的设备同样,也是寄存器,数据总线。传输方式也是读写寄存器,或者DMA传输。
linux并无为FPGA提供一套新的接口方式
。须要写驱动
IP的寄存器映射地址是编译时设置的,而后经过设备树传给驱动。驱动里面要作个虚拟地址映射才能够用。就这么一点区别,其余的和普通驱动同样
你若是不写成平台总线驱动,就能够不用设备树,写成普通驱动,不过写成设备树灵活些
什么设备或者子系统架构就看功能需求了
若是DMA和USB功能放到一块儿,写一个字符设备就好了。无论是usb仍是dma,传完了都会有中断回调函数,这里面开启下次传送就好了。usb和dma共有这个字符设备
。杂设备会简单吗
是的,可是少不了几行代码,并且很差设置私有数据
也能够,分层、分模块。可是全部的数据最好在底层完成转移,就看你是否愿意花功夫去作
。DMA
这个DMA到DMA回环测试驱动,要本身作IP核
不须要了解AXI协议,zynq的DMA驱动都作好了,直接调用DMA的通用接口就好了
。USB3.0速度小于理论速度
有协议开销,并且批量端点的话,错误重传也会影响有效带宽
大数据量异步适合些,带宽是看用的什么端点传的,数据量大的时候与异步同步关系不大,测得300多MB/s,具体值忘了
大数量传用BULK和ISO端点传,BULK会错误重传,ISO保证带宽,但不保证数据的可靠性,可能会掉数据,另外linux对iso支持很差,建议用bulk
。一个hub同时接鼠标,键盘,传输数据线
带宽会受限HUB的带宽,再就是供电也会受限hub的供电能力,建议直接接root hub上
并且,我记得,鼠标和键盘用的中断端点,USB3.0协议会为这个端点保留必定的带宽,固然这个带宽不高,感性趣的话能够查查
。qt移植
网上有移植qt+opengl,eglfs,参考要少些,能够找找。我没有单独移植过qt+opengl,没这个需求。不过yocto里面有
。arm 版 ubuntu
单独编内核而后替换很方便的
不用修改文件系统,只替换内核,驱动等修改部分
。其余
yocto用git下来的都是tar.gz之类的包
不少驱动都有实现用户空间通用驱动的,像USB、I2C、SPI等linux