本文包括驱动、固件、CPLD代码讲解(也包括gr-osmosdr中的相关部分)。

HackRF是比较早期的一款SDR设备,凭借其相对低廉的价格加上半双工收发能力,在国内的SDR市场中占比很高。这款设备的优点是软硬件全部开源,加上芯片也比较常见,因此出现了不少国产版本,降低了使用门槛。虽然,目前出现了各种各样性能更高的SDR设备,如LimeSDR、BladeRF、FreeSRP等,但是这些设备的结构和工作原理都与HackRF类似,板子上一般都带有射频芯片(HackRF分为变频芯片和AD/DA芯片,其它设备合并在一个芯片中)、FPGA(HackRF里用的是CPLD)、ARM核心的单片机。

虽然,HackRF经过多次修改,配套代码越来越完善,但是根据本人的习惯,还是喜欢从较早期的版本开始,虽然可能有bug,但是冗余功能比较少,可以更好地抓住重点。目前打算从hackrf-2013.06.1这个版本开始看,这个版本应该是对应于jawbreaker(HackRF的早期测试版),但是代码结构基本跟最新的一样,以后可能会再看对应于HackRF One的早期代码。所有这些版本的代码都能在原作Michael Ossmann的github repository里找到。只有gr-osmosdr是单独的,但是也能从github上找到。

这些程序名字各种各样,有的叫接口,有的叫驱动、固件。但是其实说到底都是c/c++的代码,只要大概看得懂c/c++语法就能看懂,只有CPLD的代码是VHDL语言,但是HackRF的CPLD的功能比较简单,因此vhd代码量也很少,早期版本才160多行,其中大多数也只是一些格式上必须有的东西。

在看这篇文章前,建议先看一下hackrf的硬件原理( http://www.hackrf.net/硬件/)

先说一下比较重要的几个文件,顺序基本上是自顶向下的调用关系。

gr-osmosdr是使gnuradio支持hackrf的接口包。gr-osmosdr/sink_impl.cc和gr-osmosdr/source_impl.cc,这两个文件用来匹配特定的设备,比如此文关注的hackrf。另外还有gr-osmosdr/lib/hackrf/hackrf_sink_c.cc和gr-osmosdr/lib/hackrf/hackrf_source_c.cc,这两个文件调用了hackrf驱动中的函数,使得这个gnuradio中的输入输出能够与hackrf设备联系起来。

然后是hackrf/host/hackrf-tools/src里的几个程序,hackrf_transfer.c和hackrf_info.c。他们的层级应该和前面说的gr-osmosdr里的程序相同,都是在调用hackrf驱动里的函数。hackrf_transfer.c主要是在命令行中实现收发,hackrf_info.c用于显示板子的信息。

接下来要说的是hackrf/host/libhackrf/src/hackrf.c,这个程序就是前面说的hackrf驱动了,它经过编译后会变成libhackrf.so文件供前面其它程序调用,这个程序中主要是通过调用libusb的函数来与hackrf板子上的固件实现交互的。

再往下就是hackrf这个块板子上跑的程序了,比较重要的是hackrf/firmware/hackrf_usb/hackrf_usb.c。这个程序在板子上的单片机里运行。电脑通过libusb发出一些设置上的指令,然后这个hackrf_usb.c就会接收这些指令,并调用其它几个芯片对应的驱动代码(注意这里说的驱动是芯片的驱动,下面会讲)对芯片进行设置。另外这个程序也实现了与主机间的USB数据的传输。

同样运行在板子的单片机里的,还有hackrf/firmware/common/里的几个对应于芯片名字的.c文件,这些文件被前面说的hackrf_usb.c调用,用来对板子上的射频芯片、AD/DA芯片等芯片的工作模式及参数进行控制。一般来说都是通过读写芯片的寄存器来控制的,根据芯片datasheet里的要求来完成,这些代码也可以写在hackrf_usb.c里,只不过为了结构清晰才分开写。

最后讲一下CPLD里上的代码。说是代码,但是它与c/c++不一样,它更接近于对一个结构的描述,早期只是硬件工程师用来描述数字电路用来交流的格式化的语言,根据语言的定义来安排数字电路的连接,只是后期可以自动综合出实际的电路直接写入芯片来运行。主要功能在hackrf/firmware/cpld/sgpio_if/top.vhd里。其实也没多少复杂的功能,这个CPLD只做了数据中转,某些状态下可能要取个反之类的。根据用户要求的接收还是发射状态来控制CPLD中流过的数据,有时从电脑传给AD/DA芯片,有时从AD/DA芯片传给电脑。另外也可以看一下hackrf/firmware/cpld/sgpio_if/top_tb.vhd,这个程序是一个测试用的程序,用于自动化测试前面说的那个vhd文件,给予一定输入后看看输出是否符合预期的想法。HackRF上的CPLD功能比较简单,其实根据Michael Ossmann本人的说法这个芯片是可以去除的,现在留着只是因为这样布线比较简单,但是在其它SDR中,对应的FPGA芯片实现的功能可能就会高级不少,LimeSDR的爱好者还有用那块FPGA实现RISC-V芯片的。

本文讲的各种代码还比较粗略,实际上这些文件编译或者综合后生成的文件是不一样的,写入板子也需要其它的程序(这些程序也是开源的,也在HackRF的这个repository里,它们还需要电脑上跑的程序和单片机里跑的程序两部分来配合,一般名字里带cpldjtag和spiflash)。另外,几个程序互相的调用也值得深入研究一下,尤其是libusb和单片机程序的通信。

这些内容以后都会讲到。

(本文将与http://club.digiic.com/Forum/PostDetail/p-1793.html同步更新,后续内容敬请期待!)

HackRF 代码讲解 (一)相关推荐

  1. matlab adsb,SDR# (SDRSharp)代码讲解

    我认为前面讲的这几种类型的代码里,最重要的有两方面:一个是与硬件驱动交互的部分(这部分上一篇已经大致讲了,另外也可以参考我的另一个HackRF代码讲解系列,会找到很多类似的东西,只不过那里调用的lib ...

  2. 手把手教你如何做建模竞赛(baseline代码讲解)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 1.大赛背景 随着科技发展,银行陆续打造了线上线下.丰富多样的客户触 ...

  3. 【资源】Faster R-CNN原理及代码讲解电子书

    <Faster R-CNN原理及代码讲解>是首发于GiantPandaCV公众号的教程,针对陈云大佬实现的Faster R-CNN代码讲解,Github链接如下: https://gith ...

  4. 激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解

    应用背景介绍 自主导航是机器人与自动驾驶的核心功能,而SLAM技术是实现自主导航的前提与关键.现有的机器人与自动驾驶车辆往往会安装激光雷达,相机,IMU,GPS等多种模态的传感器,而且已有许多优秀的激 ...

  5. 彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战

    应用背景介绍 自主导航是机器人与自动驾驶的核心功能,而SLAM技术是实现自主导航的前提与关键.现有的机器人与自动驾驶车辆往往会安装激光雷达,相机,IMU,GPS等多种模态的传感器,而且已有许多优秀的激 ...

  6. 彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进

    视觉三维重建 = 定位定姿 + 稠密重建 + surface reconstruction +纹理贴图.三维重建技术是计算机视觉的重要技术之一,基于视觉的三维重建技术通过深度数据获取.预处理.点云配准 ...

  7. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  8. python中的object是什么意思_Python object类中的特殊方法代码讲解

    python版本:3.8class object: """ The most base type """ # del obj.xxx或del ...

  9. 三层代码讲解--第一课

    主题:三层代码讲解--第一课 主持人:老吴 时间:2004-05-24 2004-05-24 10:47:00 天之痕_若虹(86278566) 請教大家一個問題好嗎 2004-05-24 10:47 ...

最新文章

  1. php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]
  2. IntelliJ IDEA图标里面的C图标,I图标含义
  3. Java中事件监听机制
  4. RV1108之MiniGui显示参数配置
  5. Hyperledger Fabric 链码(3) 生命周期和API
  6. ZeroClipboard的时代或许已经过去了
  7. ios 裁剪框大小_IOS UIimageView裁剪
  8. Spring4.3.10 集成 Apache CXF 3.3 详细说明
  9. FZU 1502 Letter Deletion
  10. python源码剖析-笔记2
  11. 哪个相机可以拍gif动图_摄制 GIF 动图的相机软件
  12. Windows Server 2008搭建【web服务器】
  13. 谨以此写下本人安装riscv的全过程 简单易懂!!(本人环境是在ubuntu18.04中)
  14. 这四款Windows上的高质量软件,装机必备,使用起来极度舒适
  15. 在机自学院自强队的这一年
  16. 运算符-12-多学一招原码反码补码,隐式和强制转换,位运算
  17. Linux运行python文件出现以下错误:terminate called after throwing an instance of ‘std::runtime_error‘
  18. 今夏成为小葫芦娃的最后机会!
  19. 几个国外域名解析网站
  20. 对不起,我就是传说中的 10 倍工程师”

热门文章

  1. ZLibrary终于复活了,给力 !
  2. 小程序推广方案有哪些?
  3. 高清压电薄膜触觉执行器
  4. Android查看系统事件,Android系统的事件处理概述
  5. 音视频应用--VMAF工具学习
  6. 爱库存+爱乐奇+齐家网,案例+原理+实践,大神讲透混合云安全|上海技术活动...
  7. 设计模式综合-会议管理系统的实现
  8. 谷歌宣布抽成30%,并要求所有安卓应用强制执行-1
  9. 计算机背景音乐,为何现在我的电脑上不能听音乐?只能听到音乐的背景音乐而没有声音...
  10. 云网端融合形成新计算体系,催生云上新物种