TDC-GP22学习记录(一)——SPI通信测试

小萌新第一次写东西,意在记录自己走过的弯路,分享经验~欢迎大佬批评指正!

目前我的项目中用到TDC芯片,这里选择的是ACAM的TDC-GP22芯片,原因是功能基本满足要求且价格便宜。

最初看芯片手册感觉功能很多,读写操作通过SPI实现,也比较方便。于是图省事,直接在淘宝上买了一个GP22的模块,制作者主要是针对芯片内部集成的模拟输入电路、脉冲发生器、内部触发器功能制作的,理论上可以直接用芯片发出的脉冲激励发射换能器,然后直接接收回波,读出飞跃时间(TOF)。

然后,拿到模块之后,第一步要做的是按照手册中提示测试SPI通信是否实现。这里就出现了问题。

SPI通信问题

按照手册中所述,可以通过写寄存器1(3字节 or 4字节),读取寄存器5得到写入数据的高1字节。

这里我用的控制器是STM32F103,写了一个简单的test函数,放在while(1)中,通过jlink仿真器观察变量。其中的读、写寄存器函数都扒的官方程序。

uint16_t Test_spi(void* Bus_Type)
{
	uint16_t rcv0=0;		
	gp22_wr_config_reg(Bus_Type, 0x81, 0x88888800);

		  delay_us(10);
			rcv0=gp22_read_n_bytes_int(Bus_Type, 2, 0XB0, 0x05);
			delay_ms(100);
	return rcv0;
}

在while(1)之前的是必要的初始化,归纳为:
1、单片机系统初始化(包括时钟、GPIO及复用等)
2、芯片上电指令 Power_On_Reset
3、芯片初始化 Init

然后在循环中测试spi功能,按理说变量rcv0应该一直为写入寄存器1数据的高1字节,但是读出却一直为0x0000.

在反复实验下,发现用手指以某个方向轻轻用力捏SPI4个引脚时能通信成功,松开又恢复0x0000,推断是模块连接的问题。

解决

在网上查询时,发现有个帖子说了类似的问题(原帖),后来楼主重新打板,让芯片的第33个引脚(芯片肚子下的大焊盘)接地。然后我也重新做了一次,芯片下面多打了几个过孔。并且拆了购买的模块的芯片,发现底下好像还真没接地。
在这里插入图片描述
打板焊接之后,重新测试,可以稳定实现SPI通信了。
在这里插入图片描述

后续

至此,SPI通信基本解决,后面就开始研究TDC的测时功能了,之后再记录。

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值