高通的通用蓝牙开发板底CF376上,有各种各样的外围电路与芯片,组成一整套完整的开发板平台,但客户通常只关心其中蓝牙芯片的各个状态下的工作电流,本文就介绍如何在CF376底板上,通过断开其它非必要电路 ,去测量单一蓝牙芯片的工作电流, 希望对客户有所帮助。
1, QCC30xx开发板可以测试在各种状态下的消耗电流值,比如开机,关机,听歌,打电话,待机等等。
2, 如测试 待机电流,请确保开发板的跳冒按下图配置,去除J22, J17, J18,目的是去除显示屏和音频功放芯片的消耗电流。
然后拨出J2,目的是把电池的电先通过电流表给CF376,把电流表的黑笔接到J20上去测试VBAT的电流值。红笔接到电池的正极,
电池的负极接到开发板的GND PIN上,比如GROUND BAR上。
3, 配置好开发板后,开始用MDE编译默认工程。
4, 烧录成功后,用两个开发板配对后,再连接手机,然后播放歌曲后暂停,保持开发板与手机的蓝牙连接。
5, 等待二三分多钟后,进入待机状态, 电流表的数值会下降到600uA左右。
如果工程中关闭NTC功能,电流表的数值会下降到500uA左右。
以上只是针对QCC30xx开发板电流的一些注意事项和测量方法,要想了解更仔细可以参考:80_CG676_1_AB_Power_Consumption_on_QCC51xx_and_QCC.pdf 文档,
/****************************************************************************
Copyright (c) 2014 - 2016 Qualcomm Technologies International, Ltd.
FILE NAME
sink_ba_ble_gap.c
DESCRIPTION
BLE GAP functionality
*/
#include "sink_ba_ble_gap.h"
#include "sink_ble.h"
#include "sink_main_task.h"
#include "sink_ba_common.h"
#include "sink_gatt_db.h"
#include "sink_gatt_manager.h"
#include "sink_ba.h"
#include "sink_ble_scanning.h"
#include "sink_ba_broadcaster.h"
#include "sink_ba_receiver.h"
#include "sink_gatt_common.h"
#include <gatt_manager.h>
#include <vm.h>
#include <stdlib.h>
#ifdef ENABLE_BROADCAST_AUDIO
#include "config_definition.h"
#include "sink_ble_config_def.h"
#include <config_store.h>
#include <gatt_broadcast_server_uuids.h>
#include <broadcast_context.h>
#ifdef DEBUG_BA_BLE_GAP
#define BA_BLE_GAP_INFO(x) DEBUG(x)
#define BA_BLE_GAP_ERROR(x) DEBUG(x) TOLERATED_ERROR(x)
#else
#define BA_BLE_GAP_INFO(x)
#define BA_BLE_GAP_ERROR(x)
#endif /* DEBUG_BLE_GAP */
/* Length of 16 bit uuid services */
#define BA_RECEIVER_SERVICES_DATA_LENGTH (0x05)
#define BA_BROADCASTER_SERVICES_DATA_LENGTH (0x05)
/* Size of 16 bit variant IV */
#define SIZE_16_BIT_IV (sizeof(uint8)*2)
/******************************************************************************
Utility function to set the scan filters for broadcaster to scan only for BA receivers
*/
static void bleBaSetScanFilters(void)
{
ble_ad_type ad_type = ble_ad_type_service_16bit_uuid;
uint16 scan_interval = ADV_SCAN_INTERVAL_SLOW;
uint16 scan_window = ADV_SCAN_WINDOW_SLOW;
const uint8 broadcast_advert_filter[] = {UUID_BROADCAST_SERVICE & 0xFF,
UUID_BROADCAST_SERVICE >> 8};
const uint8 broadcast_2_advert_filter[] = {UUID_BROADCAST_SERVICE_2 & 0xFF,
UUID_BROADCAST_SERVICE_2 >> 8};
bool random_addr = FALSE;
#ifdef ENABLE_RANDOM_ADDR
random_addr = TRUE;
#endif
/* first clear the existing filter */
ConnectionBleClearAdvertisingReportFilter();
/* Just update the correct filter for recevier */
if(BA_RECEIVER_MODE_ACTIVE)
{
ad_type = ble_ad_type_service_data;
scan_interval = ADV_SCAN_INTERVAL_FAST;
scan_window = ADV_SCAN_WINDOW_FAST;
/* As receiver, we can also get adverts from different broadcast UUIDs */
ConnectionBleAddAdvertisingReportFilter(ad_type,
sizeof(broadcast_2_advert_filter),
sizeof(broadcast_2_advert_filter),
broadcast_2_advert_filter);
}
/* setup advert filter, scan parameters and start scanning.
* now waiting on a CL_DM_BLE_ADVERTISING_REPORT_IND message. */
ConnectionBleAddAdvertisingReportFilter(ad_type,
sizeof(broadcast_advert_filter),
sizeof(broadcast_advert_filter),
broadcast_advert_filter);
/* Set the Scan parameters */
ConnectionDmBleSetScanParametersReq(TRUE, random_addr, FALSE,
scan_interval,
scan_window);
}
/********