lmp90098无法使用SPI接口读取数据
我按照DATASHEET中的时序对LMP90098进行性读取,但是读取回来的数据全部是0xff,用示波器测量SDO脚,是高电平。我用的是atmega128主控IC,SPI接口是IC内部自动产生时序,用(1/128)MHZ的时序频率,这个接口上还带有其他IC,那些IC工作正常。LMP90098采用内部振荡器,留有外部振荡器接入方式,我估计是程序时序有问题:
lmp90098写操作如下:
void Wtlmp90098(unsigned char regAdd,unsigned char*val,unsigned char ct)//寄存器地址、数据、数据量
{
unsigned char ha;
unsigned cahr ch=0;
ha=(regAdd&0xf0)>>4;
if((ct-1)<0x04) ch=(ct-1); else ch=3;
ch<<=5;//设置数据尺寸
ch|=(regAdd&0x0f)//设置数据低地址
adc_on()//拉低csb信号
SPI_WR(0X10);//高地址写入命令
SPI_WR(ha);//写入高地址
SPI_WR(ch);//写入低地址
for(int i=0;i<ct;i++)
SPI_WR(val[i]);//写入数据
adc_off();//拉高csb信号
}
LMP90098读操作如下:
void Wtlmp90098(unsigned char regAdd,unsigned char*val,unsigned char ct)//寄存器地址、数据、数据量
{
unsigned char ha;
unsigned cahr ch=0;
ha=(regAdd&0xf0)>>4;
if((ct-1)<0x04) ch=(ct-1); else ch=3;
ch<<=5;
ch|=(regAdd&0x0f);
ch|=0x80;//设置读信号
adc_on()//拉低csb信号
SPI_WR(0X10);//高地址写入命令
SPI_WR(ha);//写入高地址
SPI_WR(ch);//写入低地址
for(int i=0;i<ct;ct++) val[i]=SPI_WR(0);
adc_off();//拉高csb信号
}
1. 检查一下输入信号的幅度是否在允许范围内,检查一下电压基准是否正确。
2. 把SPI接口上其他的器件都关掉,就是说MCU只和AFE通信,看看结果怎样。
3. 代码的问题建议发到MSP430版,那边应该有专家帮你检查代码写得是否正确。
谢谢你的回答
1、SI输入信号的幅度在0~3.3v,工作电压是3.3v;
2、我做这个测试时,就只开LMP90098,其他器件是关掉的;
我现在怀疑LMP90098是否启动运行了,不知用什么方法可以测出IC在默认的情况下在工作
LMP上电后,看看稳压电源的电流输出,如果电流输出在LMP的正常工作范围内,估计是正常工作了。如果电流不正常,那可能就是被power down了,或者其他地方出了问题。你有没有把代码发到MSP430版?那边有C的高手,应该能帮你检查代码是否正确。
谢谢!模拟电源引脚虚焊了,呵呵