na5tr1 测距芯片调试小结

刚开始被通知要使用na5tr1芯片实现测距功能的时候,还是处于一无所知的状态,只是得到了一堆的芯片文档资料,硬件实物还遥遥无期,百度上资料也少的可怜,开始抱着文档乱啃,寄存器一个挨着一个看,着实费劲,一点头绪都没有。
直到一个偶然的机会,在一个论坛里面找到了一份调试代码,终于看到了成功的曙光。
看了一下代码的流程之后,将其移植到了stm32上面,主要包括app.c hwclock.c ntrxinit.c ntrxiqpar.c ntrxranging.c ntrxutil.c
phy.c nnspi.c
首先调试开始前一定要保证芯片的供电没有问题,2.5v,2.9v 5v ,供电不正常会出现一些预料不到的问题,其次spi通信的可靠性很重要,spi通信不可靠,所有的都是徒劳。芯片的限制通信速率最大21Mbps,不要超过这个值。spi通信要注意,每一个读或者写的指令都要按照先写一个字节的数据再读一个字节的顺序,不然会出现spi通信错误,刚开始调试的时候就是因为不知道这一条在spi上面卡了很久。

一些主要函数的介绍
NTRXInit(); 里面主要是一些对测距芯片的工作频率,spi通信模式的设置
PHYInit (); 里面主要是对测距的一些软件变量进行初始化,
ntrxShadowReg[NA_TxIntsReset_O] = 0x3f;
ntrxShadowReg[NA_RxIntsReset_O] = 0x7f; 对于这两个寄存器的值,推荐用这两个数值。
APLInit(); 里面主要是设置芯片的地址,对于测距发起端来说还要设置远端地址即和哪一个芯片测距,对于响应端来说可有可无。
上面三个初始化完成之后,就可以进入测距流程了。
一直循环 APLPoll (); PHYPoll (); 两个函数,测距发起端可以设置一个定时器,定时发起一次测距,发起测距在 APLPoll (); 函数内设置,
PDSap (); PLMESap(); 里面主要是对芯片的寄存器的设置的和获取寄存器的值的指令的集合,方便用户设置芯片,以及获取芯片配置信息。
PDCallback(); 里面是对测距数据的一个处理,得到测的的距离数值。
PHYPoll (); 是测距的主体不论是快速测距还是普通测距,所有的流程及状态转换都是在这个函数里面进行的,大概流程是读接收和发送状态寄存器,检测是否有进行过发送操作或者是接收到了数据;如果有发送操作,先判断发送次数,如果超过了预设值,那么标记发送失败,重新开始测距,如果未超过预设,那么将对应的状态转变,等待远端的响应。
所有的测距信息都是汇总在发起端的,最后的测距结果是在发起端进行计算得到。
常见的几种测距错误信息原因
0x02 发起端没能正常发送测距信息,检查spi通信是否可靠,芯片电压是否正常,
0x10 发起端正常发起了一次测距,响应端未能正常响应。
0x80 测距流程能够全部进行下来,但是测距数据错误。

猜你喜欢

转载自blog.csdn.net/SDong_FDong/article/details/87913418