微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2640 control lmt70

cc2640 control lmt70

时间:10-02 整理:3721RD 点击:

hello,我在开发用cc2640去采集lmt70芯片的温度时,遇到了这样的问题,在lmt70的供电端上电前就接到cc2640时,程序无法启动。如果将lmt70的供电端先断掉再接上,发现可以正常运行程序,能打印正确采集的温度,能广播。请帮忙给点建议。详情如下(附上原理图和pcb图):

我想要实现的功能是用cc2640的adc来采集lmt70给出的模拟信号,根据datasheet来转换成温度。但是我发现了一个比较怪异的问题:一旦我将lmt70的供电端在上电之前(即原理图和pcb那样),就发现程序无法启动:无法发广播,无法用串口打印出数据,debug模式下程序只能跑到main函数的最后一句BIOS_start();处停止。遇到这种情况,我做了如下的事情来排除一些原因。

1,硬件是否连接好。我用示波器测量lmt70的TAO端,得到950mv左右的电压,转换成温度28度,这个虽然稍有偏差,但是可能是adc采样的误差。还有遇到过如果lmt70没有正常的被供电,那么输出的电压是600mv左右。所以硬件连接应该没问题。

2,确认软件adc的采样功能能够正常运行。将lmt70的供电端先不供电,待程序启动后再供电,发现能够准确采集到数值。adc采样应该也没有问题。

3,确认供电端是否正常工作。将DIO_7引脚连接至led灯,再串一个电阻。发现可以将led灯点亮或熄灭。而且量DIO_7端电压也是3.2v。

4,排除芯片问题。焊接另外一个cc2640芯片,发现结果仍然没有变化。

5,排除串口的原因。程序中将串口的部分的代码注释掉。编译不出错。再烧录之后发现仍然有同样的问题。

6,不用DIO_7供电,直接用vcc3.3v给lmt70供电。这时程序是可以正常的运行,且能打印采集到的正确数据。

7,lmt70部分原理图有参考官方的datasheet。

8,换成别的端口给lmt70供电,比如用DIO_3(飞线),结果仍然有同样的问题。

9,先断开adc端口,只连接DIO_7。仍然有同样的问题。即使程序中将DIO_7输出低电平。

总结下问题现象就是:一旦DIO_7引脚与lmt70的供电端连接上,程序就不能运行起来。

my question is when DIO_7 connect  to lmt70's vdd,my program will not start.It stops at BIOS_start().I am wondering why do this cause stop of program? please help me ,thanks very much.

附上部分代码(并不是在同一个文件中,只是一部分相关代码):

//Light_Power 为采集lmt70信号端

PIN_Config BoardGpioInitTable3[] = {

Light_Value | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS,

PIN_TERMINATE
};

//Light_Power 为给lmt70供电端

PIN_Config BoardGpioInitTable4[] = {

Light_Power | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_OPENSOURCE | PIN_DRVSTR_MAX, /* optical power initially off */ /* Button is active low */

PIN_TERMINATE
};

void led_key_init(void)
{
// Open pin structure for use
hSbpPins = PIN_open(&sbpPins, BoardGpioInitTable4);
// Register ISR
PIN_registerIntCb(hSbpPins, buttonHwiFxn);
// Configure interrupt
PIN_setConfig(hSbpPins, PIN_BM_IRQ, Board_KEY_SELECT | PIN_IRQ_NEGEDGE);
// Enable wakeup
PIN_setConfig(hSbpPins, PINCC26XX_BM_WAKEUP, Board_KEY_SELECT|PINCC26XX_WAKEUP_NEGEDGE);
//PIN_setOutputValue(hSbpPins, Light_Power , 1);
}


void light_sensor_init(void)
{
hSbpPins = PIN_open(&sbpPins, BoardGpioInitTable3);
// Enable clock for ADC digital and analog interface (not currently enabled in driver)
AUXWUCClockEnable(AUX_WUC_MODCLKEN0_SOC_M|AUX_WUC_MODCLKEN0_AUX_ADI4_M);
// Connect AUX IO4 (DIO1) as analog input. Light sensor on SmartRF06EB

AUXADCSelectInput(ADC_COMPB_IN_AUXIO4);
//AUXADCEnableSync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_10P6_US, AUXADC_TRIGGER_MANUAL);

}

uint16 cal_light(void)
{
uint16 light_value;
AUXADCEnableSync(AUXADC_REF_VDDA_REL, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL);

AUXADCGenManualTrigger();

light_value = (uint16)(AUXADCReadFifo());

AUXADCDisable();

return light_value;

}

uint16 light_evt_handle2(void)
{

uint16 ave_adc_result = 0;
uint16 temp;
uint16 adc_result[10] ;

uint8 i,j;

for(i=0;i<10;i++)
{
adc_result[i]=cal_light();
}

for(i=0;i<10;i++)

{
ave_adc_result=ave_adc_result+adc_result[i];
}

ave_adc_result=ave_adc_result/10;
ave_adc_result=(ave_adc_result*3300)/4096; //转换成0.1mv

return ave_adc_result;

}

PIN_setOutputValue(hSbpPins, Light_Power ,1);

testValue=light_evt_handle2();

dongdong,

好多字啊。。。

长话短说,几乘几的2650?根据你的描述,我猜是4x4的。而且我猜你用的还是SDK2.0?

如果真是这样,那就好解释了。

两个方法你可以尝试:

1. 在你的app工程里,TOOLS->appBLE.cfg 打开,Boot.checkBackdoor 改成fasle。

2. 第二个方法更简单,升级到SDK 2.1。

SDK2.0里面会启动检测backdoor的pin脚, 4x4的刚好是DIO_7。

Y,感谢!感谢!感谢!(重要的事情说三遍!)根据你的提示,我试了一下,完美的解决了我的问题。对我的项目开发有了极大的好处。再次感谢!

Hi,Y。我用的确实是4x4封装。另外请教下怎么更新sdk?

dongdong,

去TI的wiki上就有连接下载:http://processors.wiki.ti.com/index.php/Category:BluetoothLE

YAN 大,如果用这个库函数写AD,单路可以按照楼主那样写,那如果多路怎么办呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top