ADRV9009的学习历程(一)

**

AD9361的同胞ADRV9009

**

终于记录一下了

距离第一次想写博客记录自己学习的点点滴滴,大概已经过去有一年有余。一直都是停留在心有余而力不足的境界。
基本每次做项目遇到问题都会来CSDN寻求帮助,这里虽离庙堂较远,但高手云集。每每读来,思绪万千,次次膜拜。
趁这次又学习了一样新物件,就记录一下,望大神看见能赐教一下。

ADRV9009

最近有项目要用到ADRV9009这个芯片。就来学习一下。做过AD9361的都知道,ADI官方会给出这个芯片的参考手册、数据手册和驱动程序。当然我只是见过AD9361,具体怎么搞的我也不太清楚,只有个映像。可以在linux下驱动,也可以在裸机下驱动,使用SPI进行控制。
昨天在ADI的官网下载了资料,都是英文的,在网上也没找到汉化版,望有汉化版的前辈能分享一下啊。由于官网是外国的,下载速度较慢,而且我下载的源码还是操作系统的,而这次项目要使用裸机进行驱动。但是裸机的源码我昨天尝试了几次都是在下载10M左右的时候就网络出错,下载不下来了,今天又去下载,还是同样的情况,也不知道为什么不能下载。
今天就抱着英文文档看了一天,只看了24页。英文是晦涩难懂啊,不过人间讲的是真细,如果能把英文文档看完,我估计就能将ADRV9009驱动起来了。

笔记中记录的参数

75MHz to 6GHz,发送450MHz
接收双通道200MHz,单通道450MHz带宽。
时分操作单双通道切换,单通道可以4选1,即ORx_IN,还有其他3个输入通道。
数据传输通过JESD204B完成。
SPI控制,GPIO。
包含一套ADC去监控外部电压。
上午记录的,现在看这些有点忘记了。

headless.c

主函数,初始化设备,可以从此代码开始开发。

talise_config.c

初始化和运行时的数据结构。
GUI配置。

/talise文件夹

文件中有功能原型,数据类型,宏定义,源码,可以去建立最终的用户软件系统,禁止修改。
talise_user.c可以修改,其包含接收增益表和用户定义宏。

/adi_hal文件夹

adi_hal.c功能原型不要改变,功能有硬件层功能,设备,资源,不过这篇文档还是针对ZC706平台的。可以尝试做平台交换。
应用层有前缀TALISE_

顶层文件talise.c/talise.h

有大多数的初始化和帮助功能。
硬件抽象层由ADIS,宏定义组成,设计成作为单独平台的上层应用。

/adi_hal的子文件夹

adi_hal.h包含HAL接口和功能。
adi_hal.c提供了ADI平台实现细节,可以作为终端用户的例程开发通用平台。
控制硬件复位信号,通常用GPIO实现,参考数据手册实现。

TALISE_openHW

打开打印调试信息。
void* devHalInfo;保存有硬件的相关信息。
API不读不写这个参数,但传输其到所有的HAL函数调用。
程序里有个时间超时的变量,如果在时间间隔内操作失败,HAL函数必须返回指示函数时间超时,可以查看adiHalErr_t章节。
这个时间值是通过API在HAL初始化通过ADIHAL_openHW函数设置的,而且API可以更新这个值,通过调用HAL函数ADIHAL_setTimeout。
可以在ADIHAL_writeToLog修改错误打印类型。

HAL函数定义

ADIHAL_openHW:设备的平台硬件初始化,初始化所有的外部硬件和正确的HAL函数,例如SPI驱动,GPIO时钟或目标平台设备。
API调用TALISE_openHW,要最先调用。
ADIHAL_openHW初始化timeout值,在任何对于时间敏感的操作,API可以调用ADIHAL_setTimeout去修改timeout值。

ADIHAL_closeHW函数:关闭设备,所有外部硬件资源。对于ADRV9009调用TALISE_closeHW函数。
在这地方有一点不理解,这个操作手册不是讲ADRV9009的吗?为什么还特别指出来对于ADRV9009的操作呢?
ADIHAL_resetHW函数:复位引脚拉低至少1ms,再拉高。
ADIHAL_setTimeout函数:设置timeout。在HAL函数期间,如果HAL操作超时,则会返回ADIHAL_WAIT_TIMEOUT错误。
ADIHAL_spiWriteByte函数:单SPI写设备,写单字节到特定的地址的特定设备,SPI片选。支持15位地址和8位数据,支持3线或4线。用taliseSpiSettings_t定义模式。
ADIHAL_spiReadByte函数:同上。
ADIHAL_spiWriteBytes函数:多地址多数据一一对应数组,也可以用单字节写循环模仿多字节写。注意adi_hal.h中的宏HAL_SPIWRITEARRAY_BUFFERSIZE的值的设置,多字节写是要小于等于这个值。
ADIHAL_spiReadBytes函数:同上。
ADIHAL_spiWriteField函数:这个函数看了几遍没看懂是做什么的,难道是写内部寄存器的?
ADIHAL_spiReadField函数:同上。
ADIHAL_wait_us函数:阻塞、睡眠延时,用于检查状态事件。
ADIHAL_writeToLog函数:设置打印错误信息。
ADIHAL_setLogLevel函数:设置打印什么错误。

/src/app/example/headless.c

提供了例程演示顶层配置和控制,支持单设备,ADI支持多设备。
talise_user.h是唯一的API文件允许开发者修改的。

taliseInit_t结构体,核心的初始化设置

初始化完成,即可处理或解除它。
ADI可以用于接收器配置,不能用于发射文件。这个还没理解,希望读到后面能明白吧。
对于接收设备,接收成员在taliseInit_t结构体中,发射和观察接收成员在taliseInit_t中,如果没有可以初始化为0.对于发射和观察接收设备,接收成员可以初始化为0,其他必须初始化为有效的文件。
TALISE_initialize API函数决定了哪些文件是有效的,基于非零I/Q数据率,如果这个通道被使能。

/src/app/example/talise_config.c 解释了结构初始化。
/src/devices/talise/talise_types.h 初始化数据结构。
AGC配置需要大量内存,故需要的时候才对其初始化。

后记

今天就只看了这么多,刚开始学习,还是希望有前辈能指点一下。
希望明天还能继续学习,继续来记录一下学习的过程,还是得记笔记,不然看过了就忘了,也不知道看了个啥。

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值