TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS131M04: spi 读取数据问题。

Part Number:ADS131M04

如图是ADS131M04的原理图,使用示波器测量有源晶振波形:

使用示波器测量sclk和cs

clk和mosi

clk和miso:

本来希望发送spi 发送 0x00,0x00,0x00 获取ads131m04的ID验证芯片是否工作;

请问我这个方法正确吗,是不是我这个芯片坏了?

yekun kun:

 DRDY 波形 RST 一直高电平

,

Amy Luo:

您好,

1、看晶振波形已经失真很严重了,不知道是否还满足tw(CLH)和tw(CLL),建议将C18去掉

2、读取芯片的ID Register,应该使用RREG命令,但是看您发出的MOSI一直是0,并未发出命令,读寄存器命令具体查看datasheet 8.5.1.10.7 RREG (101a aaaa annn nnnn)部分,有读取一个寄存器时序图和读取多个寄存器时序图

,

yekun kun:

你好我clkin 改用stm32 占空比 50% 的PWM波(如下图) ,之前8.192MHZ晶振可能示波器带宽不够( 示波器100MHZ 1GSa/S )

读取ID代码改为:(读取RE命令 0XA000 , ID地址0x00)

uint8_t rx[19];void TM7707_Initialize(void){ // Initialize GPIO for TM7707 device. TM7707_InitializeGPIO(); // Initialize SPI controler. TM7707_InitializeSPI2(); // Synchronize device clock. //TM7707_SynchronizeDeviceClock(); // Configure the clock registers TM7707_CS_ENABLE(); // CS = 0; rx[0] = SPI_TransferByte((0xA000 | (((uint16_t)0X00) << 7))>>8); rx[1] = SPI_TransferByte((0xA000 | (((uint16_t)0X00) << 7))&0XFF); rx[2] = SPI_TransferByte(0x00); TM7707_CS_DISABLE(); // CS = 0; }

示波器读取:

CLK AND MOSI

CLK AND MISO

ID仍然不读取不成功;

PS: (DRDY 频率976.59HZ)

,

Amy Luo:

您使能CRC了吗?CRC默认是禁用的,如果没有使能只发RREG 命令0XA000就可以了,看第一个示波器图片中发了3个字节,0XA000是2个字节

ADS131M04提供了ADS131M0x Example C Code (Rev. B),可以从ADS131M04产品首页下载,希望对您有帮助:

https://www.ti.com.cn/cn/lit/zip/sbac254

,

yekun kun:

我换了一个单片机测试,不知道为什么我的SPI MOSI总线输出的电压没有到3.3V同时,DRDY也不是连续输4k的脉冲;

断开单片机与ADS131M04;

PS 怀疑晶振有异常:

请问默认DRDY是不是总是8.192mhz下4K输出的?我这个中间断开一段时间;连续的时候是4K的

上面为什么发3个字节呢,主要芯片默认是24位的,例程也是发3*8的

uint8_t buildSPIarray(const uint16_t opcodeArray[], uint8_t numberOpcodes, uint8_t byteArray[]){ /* * Frame size = opcode word(s) + optional CRC word * Number of bytes per word = 2, 3, or 4 * Total bytes = bytes per word * number of words */

numberWords = numberOpcodes + (SPI_CRC_ENABLED ? 1 : 0);//1+0 =1;

bytesPerWord = getWordByteLength(); //24 bit; –>3 numberOfBytes = numberWords * bytesPerWord;

int i; for (i = 0; i < numberOpcodes; i++) { // NOTE: Be careful not to accidentally overflow the array here. // The array and opcodes are defined in the calling function, so // we are trusting that no mistakes were made in the calling function! byteArray[(i*bytesPerWord) + 0] = upperByte(opcodeArray[i]); byteArray[(i*bytesPerWord) + 1] = lowerByte(opcodeArray[i]); }

#ifdef ENABLE_CRC_IN // Calculate CRC and put it into TX array uint16_t crcWord = calculateCRC(&byteArray[0], numberOfBytes, 0xFFFF); byteArray[(i*bytesPerWord) + 0] = upperByte(crcWord); byteArray[(i*bytesPerWord) + 1] = lowerByte(crcWord);#endif

return numberOfBytes;}

getWordByteLength 得到的是3;numberOfBytes=1*3=3

 uint8_t numberOfBytes = buildSPIarray(&opcode, 1, dataTx);

所以是一次发3个字节;

,

yekun kun:

请问这个晶振一定要选用 SIT8924BA-22-33E-8.192000G,普通的有源晶振可以吗;

比如CMOS 的,我测试用这个的;

,

yekun kun:

你好我使用STM32 和 蓝牙芯片给 ADS131M04 发送0xA000或者0XA00000都不行,还有其他办法判断ads131m04已经正常工作了?

,

Amy Luo:

我看到您发帖咨询ADS131M04对读取数据噪声优化的问题,那么您这个问题是否已经解决了?或者还存在其他什么问题

赞(0)
未经允许不得转载:TI中文支持网 » ADS131M04: spi 读取数据问题。
分享到: 更多 (0)