cc1101低功耗设计方案 CC1101收发驱动程序.docx

上传人:b****3 文档编号:2151087 上传时间:2022-10-27 格式:DOCX 页数:16 大小:22.57KB
下载 相关 举报
cc1101低功耗设计方案 CC1101收发驱动程序.docx_第1页
第1页 / 共16页
cc1101低功耗设计方案 CC1101收发驱动程序.docx_第2页
第2页 / 共16页
cc1101低功耗设计方案 CC1101收发驱动程序.docx_第3页
第3页 / 共16页
cc1101低功耗设计方案 CC1101收发驱动程序.docx_第4页
第4页 / 共16页
cc1101低功耗设计方案 CC1101收发驱动程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

cc1101低功耗设计方案 CC1101收发驱动程序.docx

《cc1101低功耗设计方案 CC1101收发驱动程序.docx》由会员分享,可在线阅读,更多相关《cc1101低功耗设计方案 CC1101收发驱动程序.docx(16页珍藏版)》请在冰豆网上搜索。

cc1101低功耗设计方案 CC1101收发驱动程序.docx

cc1101低功耗设计方案CC1101收发驱动程序

cc1101低功耗设计方案CC1101收发驱动程序

本文主要是关于cc1101的相关介绍,并着重对cc1101低功耗以及驱动收发程序进行了详尽的阐述。

cc1101CC1101是一款低于1GHz设计旨在用于极低功耗RF应用。

其主要针对工业、科研和医疗(ISM)以及短距离无线通信设备(SRD)。

CC1101可提供对数据包处理、数据缓冲、突发传输、接收信号强度指示(RSSI)、空闲信道评估(CCA)、链路质量指示以及无线唤醒(WOR)的广泛硬件支持。

CC1101在代码、封装和外引脚方面均与CC1100兼容,可用于全球最为常用的开放式低于1GHz频率的RF设计。

●超低功耗无线收发器

●家庭和楼宇自动化

●高级抄表架构(AMI)

●无线报警安全系统

◆387.0MHz~464.0MHz工作频段。

(433MHz,0.6kbps,1%误码率时为-116dBm)。

(接收模式,433MHz,1.2kbps时仅16.0mA)。

◆最高可设置为+10dBm的发射功率。

◆支持0.6kbps~500kbps的数据传输速率。

◆支持多种调制模式(OOK、ASK、GFSK、2-FSK、4-FSK和MSK)。

◆提供对同步字检测、地址校验、灵活的数据包长度以及自动CRC处理的支持。

◆支持RSSI(接收信号强度指示)和LQI(链路质量指示)。

◆通过4线SPI接口与MCU连接,同时提供2个可设定功能的通用数字输出引脚。

◆独立的64字节RXFIFO和TXFIFO。

◆工作电压范围:

1.9V~3.6V,待机模式下电流仅为200nA。

◆工作温度范围:

-40℃~+85℃

cc1101低功耗设计方案电路设计上,只用到了一个LED、串口1、一个模拟SPI、一个中断线、一个读卡芯片RESET线,硬件上就只剩下这么点东西了,这个时候我采用的是待机模式,使用的是读卡芯片的中断接PA0唤醒STM32,在此之前要先使得读卡芯片进入低功耗、然后STM32进入低功耗,这一步完成了,貌似没什么问题,功耗确实从几十mA骤降到3mA左右,开始还挺满意的,但是测试厂商提供的样板,功耗却只有几十uA,有点郁闷了。

为什么会这样?

反复查看硬件、程序,都找不出原因,而且这个时候的工作效果很烂,根本就不能唤醒,所以我就怀疑是读卡芯片一端低功耗有问题,因为我将PA0脚直接短接VCC,这样就可以产生一个边沿触发STM32唤醒了,但是用读卡芯片无法唤醒,所以我怀疑是读卡芯片的RESET脚电平不对,经检查,确实是因为RESET脚加了上拉电阻,读卡芯片是高电平复位,在STM32进入待机后,管脚全都浮空了,导致RESET被拉高,一直在复位;我去掉上拉电阻,觉得很有希望解决问题了,但是测试结果是:

有时候能唤醒,有时候不能,我仔细一想难道是因为STM32待机后管脚电平不确定,导致读卡芯片RESET脚电平不定,而工作不正常,看样子只有换用其他方案了。

后面确实验证了我的想法,使用STOP模式后,唤醒问题引刃而解。

就在关键时刻,芯片原厂火种送炭,送来急需的技术支持资料,一个包含低功耗源代码,赶紧拿过来测试,先研读下代码,使用的是STOP模式,而不是待机模式,使用的是任意外部中断唤醒,功耗低制40uA,这个时候就相当激动啊,赶快下载测试啊,结果功耗确实降了,但还是有1mA,更人家一比多了几十倍啊。

我第一反应是硬件不对,经过测试修改,首先找到第一个原因,读卡芯片RESET管脚上拉电阻又给焊上去了。

.,拆掉后功耗骤降到几百uA,还是不行。

测试过程中,为了去掉LDO的干扰,整板采用3.3V供电,但是后面经过测试,LDO的功耗其实也只有5uA不到,这LDO功耗值得赞一个;虽然结果还是没达到预期,但是看到了希望,胜利就在眼前啊。

为此我反复看了技术支持提供的程序,发现他们的STM32的所有管脚都的设置都有所考究:

(因为公司保密原则,代码中删除掉了关于该读卡芯片的前缀信息等)

GPIO_InitTypeDefGPIO_InitStructure;

/*GPIOAPeriphclockenable*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

/*GPIOBPeriphclockenable*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

/*GPIOCPeriphclockenable*/

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

//####################################################

//USART1PortSet

//TXD

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOA,

//RXD

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,

//RSToutputpushpullmode

GPIO_InitStructure.GPIO_Pin=TRST;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(PORT1,

//IRQinputpull-upmode

GPIO_InitStructure.GPIO_Pin=TIRQ;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(PORT1,

//MISOinputpull-upmode

GPIO_InitStructure.GPIO_Pin=MISO;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(PORT2,

//NSS,SCK,MOSIoutputpushpullmode

GPIO_InitStructure.GPIO_Pin=(NSS|SCK|MOSI);

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(PORT2,

//############################################################################

//TESTPortset

//TESTOinputpushpullmode

GPIO_InitStructure.GPIO_Pin=TESTO;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(TEST_PORT,

//############################################################################

//TESTPortset

//TESTIoutputpushpullmode

GPIO_InitStructure.GPIO_Pin=TESTI;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(TEST_PORT,

//############################################################################

//LEDPortSet

//LEDoutputpushpullmode

GPIO_InitStructure.GPIO_Pin=LED;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(LED_PORT,

//############################################################

GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOA,

GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOB,

GPIO_InitStructure.GPIO_Pin=(GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;

GPIO_Init(GPIOC,

首先,想MOSI、SCK、CS、LED、RST这些管脚应该设置为推挽输出,TXD设置为复用输出,而IRQ、RXD、MISO设置浮空输入,什么都没接的管脚全都设置为下拉输入,而TESTI、TESO我一直不解是什么东东,开始就没管,而开始的时候MISO我也没怎么注意,设置成上拉输入(而不是浮空输入),反正大部分按照厂家提供的参考,我并没有照搬,测试效果一样,但功耗确是还有80-90uA,期间我找了好久没找到原因,给技术支持一看,原来是因为MISO没有设置成浮空输入,我是设置成了上拉输入,上拉电阻一直在消耗大约40uA的电流。

好吧,这是自己不够细心导致的,以后做低功耗的项目管脚配置是个大问题,不能再这么马虎了!

我将MISO设置成浮空输入之后,最低功耗还是有40+,离10uA的最低功耗还有段距离,到底是为什么呢?

最后我发现

,该读卡芯片有个TESTIN/TESTOUT管脚,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1