AD9371概念:

AD9371 是一款宽带射频 (RF) 收发器,提供了双通道发射器和接收器、集成的合成器和数字信号处理功能。 该元件系列提供 FDD 和 TDD 应用中的 3G/4G 微处理器和宏基站设备所需的高性能和低功耗的多功能组合。 AD9371 工作频率为 300 MHz 至 6 GHz,涵盖大部分需执照和免执照蜂窝频带。 该 IC 支持高达 100 MHz 的接收器带宽。 器件还支持观测接收器,发送合成带宽高达 250 MHz,可适应数字校正算法。

AD9371 包括宽带直接转换信号路径,具有最尖端的噪声系数和线性度。 每个完整的接收器和发射器子系统包括 DC 偏移校正、正交错误校正和可编程数字滤波器,因而无需在数字基带中使用这些功能。 集成的多个辅助功能,如辅助模数转换器 (ADC)、辅助数模转换器 (DAC) 和通用输入/输出 (GPIO) 可提供额外的监视和控制能力

特性  
  • 双通道差分发射器 (Tx)
  • 双通道差分接收器 (Rx)
  • 带两路输入的观测接收器 (ORx)
  • 嗅探器接收器 (SnRx),3 路输入
  • 频率/调谐范围:300 MHz 至 6 GHz
  • Tx 合成带宽 (BW) 至 250 MHz
  • Rx 带宽:8 MHz 至 100 MHz
  • 支持频分双工 (FDD) 和时分双工 (TDD) 操作
  • Tx、Rx、ORx 和时钟生成的全集成独立小数 N 分频射频 (RF) 频率合成器
  • JESD204B 数字接口
  • 串行接口:串行外设接口 (SPI)
  • 电源输出 – 7 dbm
  • 供电电压:3.3 V
  • 电流c接收:1 A
  • 电流 – 发射:1.1 A
  • GPIO:19
  • 工作温度:-40C° 至 +85C°
  • 196-LFBGA
应用  
  • 微波
  • 航空航天
  • 军事
  • 3G/4G 微处理器和宏基站 (BTS)

内核菜单栏配置:

Linux Kernel ConfigurationDevice Drivers  ---><*>     Industrial I/O support --->--- Industrial I/O support-*-   Enable ring buffer support within IIO-*-     Industrial I/O lock free software ring-*-   Enable triggered sampling support*** Analog to digital converters ***[--snip--]-*- Analog Devices High-Speed AXI ADC driver core< > Analog Devices AD9361, AD9364 RF Agile Transceiver driver<*> Analog Devices AD9371 RF Transceiver driver< > Analog Devices AD6676 Wideband IF Receiver driver< > Analog Devices AD9467, AD9680, etc. high speed ADCs< > Analog Devices Motor Control (AD-FMCMOTCON) drivers< > Generic FFT driver<*> Generic AXI JESD204B configuration driver[--snip--]Frequency Synthesizers DDS/PLL  --->Direct Digital Synthesis  ---><*> Analog Devices CoreFPGA AXI DDS driver

将内核固件"Mykonos_M3.bin"加入到内核配置菜单栏中

drive  -->

Generic Driver Option--->

在内核源码中:/drive/iio/ad9371.c

其在内核初始化流程如下:

ad9371初始化
1. 从ad9371_probe开始执行
2. clk = devm_clk_get(&spi->dev, "jesd_rx_clk"); 获取jesd_rx_clk的结构体
3. indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*phy)); 分配IIO驱动资源
4. ret = ad9371_alloc_mykonos_device(phy); 分配9371 API参数内存
5. phy->pdata = ad9371_phy_parse_dt(indio_dev, &spi->dev); 设置9371 API默认参数,还未配到9371
6. phy->reset_gpio = devm_gpiod_get(&spi->dev, "reset", GPIOD_OUT_LOW); ad9371_reset(phy); 复位9371
7. phy->sysref_req_gpio = devm_gpiod_get(&spi->dev, "sysref_req", GPIOD_OUT_HIGH); sysref_req拉高
8. 初始化SPI接口参数
9. 如果有TX, phy->jesd_tx_clk = devm_clk_get(&spi->dev, "jesd_tx_clk"); 获取jesd_tx_clk的结构体
10. phy->jesd_rx_os_clk = devm_clk_get(&spi->dev, "jesd_rx_os_clk"); 获取jesd_rx_os_clk的结构体
11. phy->dev_clk = devm_clk_get(&spi->dev, "dev_clk"); 获取dev_clk的结构体
12. phy->fmc_clk = devm_clk_get(&spi->dev, "fmc_clk"); 获取fmc_clk的结构体
13. phy->sysref_dev_clk = devm_clk_get(&spi->dev, "sysref_dev_clk"); 获取sysref_dev_clk的结构体
14. phy->sysref_fmc_clk = devm_clk_get(&spi->dev, "sysref_fmc_clk"); 获取sysref_fmc_clk的结构体
15. ret = clk_prepare_enable(phy->fmc_clk); 打开fmc_clk时钟*****fpga device clk
16. ret = clk_prepare_enable(phy->dev_clk); 打开dev_clk时钟
17. ret = request_firmware(&phy->fw, FIRMWARE, &spi->dev); 加载固件文件
18. ret = ad9371_setup(phy); 配置9371
19. ad9371_clk_register(phy, "-rx_sampl_clk", NULL, NULL, CLK_GET_RATE_NOCACHE | CLK_IGNORE_UNUSED , RX_SAMPL_CLK); 注册rx_sampl_clk时钟
20. 生成配置接口文件profile_config
21. 生成配置接口文件gain_table_config
22. 注册IIO驱动
23. ret = ad9371_register_axi_converter(phy); ?
24. ret = ad9371_register_debugfs(indio_dev); 生成debugfs下的参数文件接口ad9371_setup()
1. 获取dev_clk,fmc_clk,这两个必须相等
2. 如果rx使能,ad9371_set_jesd_lanerate()算rx lanerate,设置到phy->jesd_rx_clk
3. ret = ad9371_update_sysref(phy, lmfc); 计算LMFC,看是否和sysref匹配,判断fpga的sysref和9371的sysref是否一致
4. ret = ad9371_reset(phy); 复位9371
5. ret = MYKONOS_initialize(mykDevice);  5.1 /* Enable Reference clock - Set REFCLK pad common mode voltage */CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_REF_PAD_CONFIG2, 0x07);  5.2 CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_SYSREF_PAD_CONFIG, 0x12); //Enable SYSREF input buffer 5.3 选择tx rx orx的SYNCB输入模式5.4 /* Set number of device clock cycles per microsecond [round(freq/2) - 1] */CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_REFERENCE_CLOCK_CYCLES, (uint8_t)((((device->clocks->deviceClock_kHz / 1000) + 1) >> 1) - 1));5.5 /* Set profile specific digital clock dividers */CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_CONFIGURATION_CONTROL_1, 0x04); /* Negate Rx2 so phase matches Rx1 */    5.6 计算TX RX通道参数5.7 CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_CONFIGURATION_CONTROL_2, txChannelSettings);CMB_SPIWriteByte(device->spiSettings, MYKONOS_ADDR_CONFIGURATION_CONTROL_4, rxChannelSettings); 设置rx tx参数5.8 /* Set the CLKPLL with the frequency from the device data structure */retVal = MYKONOS_initDigitalClocks(device);
6. ret = MYKONOS_checkPllsLockStatus(mykDevice, &pllLockStatus); CLKPLL Status Check
7. ret = MYKONOS_enableMultichipSync(mykDevice, 1, NULL); Perform MultiChip Sync (MCS) on Mykonos Device
8. ad9371_sysref_req(phy, SYSREF_PULSE);
9. ret = MYKONOS_enableMultichipSync(mykDevice, 0, &mcsStatus);  回读MCS的状态
10. MYKONOS_initArm(), Load Mykonos ARM10.1 retVal = MYKONOS_setupJesd204bFramer(device); 配置204b framer
11. MYKONOS_loadArmFromBinary() 加载固件文件
12. Set RF PLL Frequencies
13. ret = ad9371_init_cal(phy, initCalMask); 校准
14. /**** Enable SYSREF to Mykonos JESD204B Framers ***//*** < User: Make sure SYSREF is stopped/disabled > ***//*** < User: make sure BBIC JESD is reset and ready to recieve CGS chars> ***/ret = MYKONOS_enableSysrefToRxFramer(mykDevice, 1);
15. Enable SYSREF to Mykonos JESD204B Deframer

在应用层配置设置:

请参考:

AD9371配置设置https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9371

linux,内核(kernel)对AD9371配置流程。相关推荐

  1. linux内核开机显示企鹅logo,批改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel开机logo(小企鹅) 修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_ka ...

  2. Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_kai 导航制导与控制实验室 2014年12月10日 本文 ...

  3. Linux内核网络数据包处理流程

    Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO. ...

  4. linux c设置rtc时间,linux内核的rtc时钟配置

    linux内核的rtc时钟配置,见Device Drivers  --->Real Time Clock .我们的RTC主要是有三种接口配置,一种是I2C接口,一种是SPI接口,还有就是CPU自 ...

  5. Linux内核入门-如何获取Linux内核源代码、生成配置内核

    如何获取Linux内核源代码 如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux内核,另一种是内核增量补丁,它们都是tar归档压缩包.除 ...

  6. 一文讲解Linux内核中根文件系统挂载流程

    根文件系统的概念 根文件系统是控制权从linux内核转移到用户空间的一个桥梁.linux内核就类似于一个黑匣子,只向用户提供各种功能的接口,但是功能的具体实现不可见,用户程序通过对这些功能接口的不同整 ...

  7. Linux高级应用(九)Linux内核的原理和配置

    一.嵌入式Linux平台的启动过程 1.运行启动引导程序-bootloader(相当于PC的BIOS) Booting from NAND Load Kernel- Uncompressing Lin ...

  8. 无人值守安装linux指定硬盘,Linux无人值守自动化安装详细配置流程!

    在生产环境中,往往需要给成百上千台服务器安装系统,手动安装略显蛋疼,网络自动化引导安装就能解决批量安装的问题,从此批量系统安装so easy! 以下配置流程均在CentOS 6.7实现 实现环境: P ...

  9. Linux内核Kernel panic常见问题(详细)总结

    目录 一.简介 1.1 hard panic 1.2 soft panic 二.常见问题 2.1 源码分析 2.2 硬件问题 2.3 系统过热 2.4 文件系统引起 2.5 内核更新 2.6 处理pa ...

  10. Linux 内核编译步骤及配置详解

    一.linux体系结构 从大面上来说,linux体系结构分为: 1 )用户空间:C库.用户应用程序: 2 )内核空间:系统调用接口.内核.硬件平台依赖代码. 具体来讲,Linux系统一般有4个主要部分 ...

最新文章

  1. python动态类型是如何实现的_Python 的动态类型系统
  2. ASP.NET中的页面指示标识
  3. C#做外挂常用API
  4. mysql gbk支持_mysql支持gbk
  5. mysql索引commit卡死_mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例...
  6. python监听udp端口_python检测远程udp端口是否打开
  7. @PathVariable详解
  8. Android11MIUI12,安卓11版MIUI12来了,3款已适配
  9. 雄安新区区块链底层系统(1.0)今日正式发布
  10. 【 Gym - 101138K 】 The World of Trains (DP)
  11. 图像局部特征(一)--概述
  12. python爬虫——web前端基础(4)
  13. 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清的区别
  14. imo与slack竞品分析报告
  15. Python中Scapy网络嗅探模块的使用
  16. Linux下Oenssl命令及搭建私有CA
  17. input file限制上传文件类型 后缀名
  18. 电脑视频html5全屏掉帧,uwp看视频全屏掉帧或卡机怎么办-解决uwp看视频全屏掉帧或卡机的方法 - 河东软件园...
  19. 判断JS数据类型的五种方法
  20. STM32控制LED灯闪烁(NB-IoT专栏—基础篇4)

热门文章

  1. db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库
  2. 如何永久删除360SANDBOX?问题解决
  3. 2012年1月份第3周51Aspx源码发布详情
  4. Android--存储权限
  5. python反编译exe
  6. 【word论文排版教程0】论文制作流程
  7. 常用的正则表达式大全(数字、字符、固定格式)
  8. 锋利的jQuery--Ajax(读书笔记四)
  9. 利用LFW对人脸识别模型进行精度评测
  10. 【深度学习之美笔记】人工“碳”索意犹尽,智能“硅”来未可知(入门系列之二)