热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ubloxNEO-7SPI接口数据读取调试总结

最近在调试ubloxNEO-7GPS,主控芯片为TMS320C6722,这款DSP外设没有UART,所以用SPI总线与GPS进行通讯。最初想在网上搜一些关于SPI接口的ublox数

        最近在调试ublox NEO-7 GPS,主控芯片为TMS320C6722,这款DSP外设没有UART,所以用SPI总线与GPS进行通讯。最初想在网上搜一些关于SPI接口的ublox数据读取经验,但网上都是清一色的UART接口读取ublox数据。通过这两天阅读手册和在硬件上的实践调试,总算有了一些结果,所以总结下来,希望能给看到本文的网友提供些调试经验,也欢迎众网友与博主进行讨论。

        对于ublox的官方手册,需要看的应该就三个:1.MAX7-NEO7_HardwareIntegrationManual_(UBX-13003704);2.NEO-7P_DataSheet_(UBX-13003787);3.u-blox7-V14_ReceiverDescriptionProtocolSpec_Public_(GPS.G7-SW-12001)。其中1和2跟硬件设计联系较密切,可以只看其关于SPI的部分,第三部分讲的是通讯协议,需要仔细看。

        一、首先我们需要再强调一下SPI总线的特点。SPI总线的传输是需要首先确定主机和从机的,ublox手册上指出当采用NEO-7上的SPI接口时GPS作为从机,与其连接的MCU作为主机;这里的SPI总线为四线连接:MISO、MOSI、CLK(时钟引脚)、CS(片选引脚);SPI传输时时钟信号由主机提供,也就是传输频率由主机确定;传输总是由主机先发送数据触发传输开始,也就是说如果主机不发送数据的话,主从机之间是无法进行数据通信的,而且主从机的传输总是同步进行。 手册上说NMEA与UBX协议对于SPI接口来说都支持,然后问题来了:用UART进行与GPS通信时,NMEA协议的GGA、GLL、GSA、GSV、RMC、VTG信息是定周期向MCU发送的,对于异步通信的UART来说只要打开接收中断,当有数据来时只要进入中断接收数据就可以。而对于SPI总线来说,由于其是全双工同步通信,所以如果MCU没有首先发数据的话,即使GPS向MCU发数据,这些数据也不会被MCU接收。

        二、关于MCU与ublox通信的一些总结:

              1.在上面提到的手册2中有一点需要注意:

        截图中有个 tINTI,Initialization Time,在MCU程序中需要将片选引脚拉低然后500us后再使能SPI。可以在拉低片选引脚后简单的做一个for循环,估计大于500us后再去使能SPI,但是这样做有些不专业而且浪费CPU,可以用定时器去做。

        2.SPI的一些配置在手册3中可以查到,手册3的附录中,MCU方的SPI设置需要与其相对应


        上面没有提到数据长度,可以推测GPS的SPI只能传输8位数据长度,在写MCU方的SPI驱动时这一点要注意。

        3.因为SPI为同步传输,所以数据的传输开始必须由MCU触发。虽然NMEA协议周期向MCU发送数据,但是如果MCU不首先发送数据的话,MCU就会忽略GPS发过来的这些数据,即使打开SPI接收中断,也不会进入中断。

        

       注意看黄色部分,当主从机都空闲时互相发送0xFF。

       所以如果想收到NMEA的数据可以这样做:MCU需要打开SPI的接收中断,若想开始接收GPS发送过来的数据,在主程序中向GPS发送一个0xFF,这样就开始了MCU与GPS之间的同步传输。当有数据过来时,MCU就会进入SPI接收中断,在接收中断中需要做的事有两件:接收数据,存入数组;发送0xFF。如果不在中断中向GPS返回个0xFF,那么数据传输就会中断。经过在硬件中的试验,因为GPS的NMEA协议周期向MCU发送数据,所以在不发送NMEA协议时,GPS向MCU发送的全为0xFF。

                                          

        上面的截图是按上述步骤做时MCU从GPS接收到的数据。把接收到的数据放在的数组SPI_RX_BUF中。由于是在室内测的,所以发过来的信息基本就是空信息,也就是2C2C2C........2C为逗号的ASCII。将上面的协议翻译后,就是GGA、GLL、GSA、GSV、RMC、VTG各条信息。中间一堆一堆的FF是GPS不发送NMEA信息时向MCU返还的数据。

        4.还有就是ublox的SPI接口也支持UBX协议,用UBX协议可对GPS做些设置,当然也能获得UBX协议的经纬度信息,而不用NMEA协议的经纬度信息。

        假如我想通过UBX协议获取天线配置信息,我需要向GPS发送CFG_ANT信息,GPS在收到信息后会立即向MCU返还天线配置信息,天线配置信息后面还要跟随ACK信息,以表示GPS是否对信息做了正确处理。

                                          

        截图中除了FF部分,包含了GPS返回的UBX协议中CFG的天线配置信息,以及ACK信息。

        还有,UBX协议中的经纬度信息放在了NAV中,那么我们如何获得NAV中的信息中呢?

        

        上面是UBX部分的一点截图,上面说要想获得NAV中的信息,只需要把payload部分设为空(也就是不发送payload),这时数据帧的length = 0;比如说我想要获得NAV_PTV信息,只需要发送:

                                0xB5      0x62     0x01    0x07    0x00    0x00    0x08     0x19

        注意length为16位,不是8位。

        

                                                               

        上面为在室外测的信息,将上面数据解析之后确实是 NAV_PTV信息,但是后面跟了一堆别的信息,熟悉NMEA协议的人马上就能看出后面跟的是NMEA协议的数据帧。后来经过多次试验,得出结论:用UBX协议获取GPS的经纬度信息,在请求发送之后,数据并不会马上发回给MCU,而是与NMEA的周期信息一起发送给MCU,并且在NMEA协议信息之前发送给MCU,后面紧跟NMEA周期数据帧。

        5.在室外测得时候,我是在北航新主楼测的(北京),但是用UBX协议返回的经纬度信息与NMEA返回的经纬度信息稍有差别。把返回的数据解析后,UBX返回的经纬度信息为:lon=116.3453160,lat=39.9788831;NMEA返回的经纬度信息为:lon=116.2071869,lat=39.5873377.对于同一地点的经纬度数据来说,应该是一样的。但是从分析出来的数据看,差别还是相当大的,如果有网友有高见,欢迎讨论。

                    


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
  • c语言 怎么访问64位地址_C语言调动硬件的原理是什么?
    大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗?1c语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • 一,关于C语言的问卷调查【作业3】1.你对自己的未来有什么规划?做了哪些准备?没有明确的规划,在学习教材知识的同时准备了解其他知识。2.你认为什么是学 ... [详细]
  • UMTS基础知识汇总
    协议框架23G接口UMTS实体EntityNameDescriptionAuCAuthenticationCenterCBCCellBroadcastCenterC-RNCCon ... [详细]
  • Bro是一款强大的网络安全工具,以及协议识别与统计的工具。Broisapowerfulnetworkanalysisframeworkthatismuchdifferentfro ... [详细]
  • 智能门禁系统是一种综合多种技术的多学科的电子技术集合,它涉及电子制造,机械设计,光学,计算机程序编程,通信原理,生物识别和统计学等诸多新技术领域。门禁系统通过识别方式可以分成三种:1.密码识别 ... [详细]
  • 昨夜西风凋碧树,独上高楼,望尽天涯路。——五代晏殊蝶恋花最近学习了APUE的一系列函数,要求用ifconfig命令来获取本机的网卡ip&# ... [详细]
  • sublime text3激活码【2021免费激活】
    (sublime text3激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将云海台教程分享给他了。激活成功之后他一直表示感谢,哈哈~Int ... [详细]
  • navcat15破解时产生不了激活码_最新在线免费激活2022.03.14
    (navcat15破解时产生不了激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注 ... [详细]
author-avatar
汪pallotta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有