有些芯片会出现485通信芯片不正常,是什么原因

2011年1月 VB大版内专家分月排行榜第二2010年10月 VB大版内专家分月排行榜第二
2013年1月 VB大版内专家分月排行榜第三2012年12月 VB大版内专家分月排行榜第三2011年6月 VB大版内专家分月排行榜第三2011年2月 VB大版内专家分月排行榜第三2010年12月 VB大版内专家分月排行榜第三2010年11月 VB大版内专家分月排行榜第三2009年7月 VB大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
2013年4月 硬件/嵌入开发大版内专家分月排行榜第二2007年9月 硬件/嵌入开发大版内专家分月排行榜第二
2013年5月 硬件/嵌入开发大版内专家分月排行榜第三2012年9月 硬件/嵌入开发大版内专家分月排行榜第三2007年11月 硬件/嵌入开发大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
2013年1月 硬件/嵌入开发大版内专家分月排行榜第一2012年10月 硬件/嵌入开发大版内专家分月排行榜第一2012年9月 硬件/嵌入开发大版内专家分月排行榜第一2012年8月 硬件/嵌入开发大版内专家分月排行榜第一2012年7月 硬件/嵌入开发大版内专家分月排行榜第一2012年6月 硬件/嵌入开发大版内专家分月排行榜第一2012年5月 硬件/嵌入开发大版内专家分月排行榜第一2012年4月 硬件/嵌入开发大版内专家分月排行榜第一2012年3月 硬件/嵌入开发大版内专家分月排行榜第一2012年2月 硬件/嵌入开发大版内专家分月排行榜第一2012年1月 硬件/嵌入开发大版内专家分月排行榜第一2011年11月 硬件/嵌入开发大版内专家分月排行榜第一2011年10月 硬件/嵌入开发大版内专家分月排行榜第一2011年9月 硬件/嵌入开发大版内专家分月排行榜第一
2014年10月 硬件/嵌入开发大版内专家分月排行榜第二2014年2月 硬件/嵌入开发大版内专家分月排行榜第二2013年10月 硬件/嵌入开发大版内专家分月排行榜第二2013年8月 硬件/嵌入开发大版内专家分月排行榜第二2013年3月 硬件/嵌入开发大版内专家分月排行榜第二2012年12月 硬件/嵌入开发大版内专家分月排行榜第二2012年11月 硬件/嵌入开发大版内专家分月排行榜第二2011年12月 硬件/嵌入开发大版内专家分月排行榜第二
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
2011年12月 硬件/嵌入开发大版内专家分月排行榜第三2011年10月 硬件/嵌入开发大版内专家分月排行榜第三2011年6月 硬件/嵌入开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。中兴微电子大谈4G手机芯片布局,会不会有点晚了-通信/网络-与非网
在近日举办的&2016年中国国际信息通信展览会&上,规划部市场总监周晋在接受记者采访时表示:&从2014年起,中兴微电子 多模芯片正式开始从中兴内部走向前台,不仅为中兴内部提供自研终端芯片,同时也向外部客户提供4G多模芯片解决方案。尤其在获得了国家产业基金的巨资注入后,将会在4G终端芯片的规划布局将更加全面和具备持续性。&
以下是此次采访的全部内容:
主持人:您好!请您介绍一下中兴微电子终端芯片研发实力和研发历程。
嘉 宾:中兴微电子于2005年12月成立了手机芯片研发团队。目前中兴微电子研发部门分布于深圳、南京、上海、西安和美国等9地的研发中心,-人员规模已超过2000人,硕士及以上学历占80%以上,特聘算法设计与仿真、SoC架构设计和协议栈软件架构等领域的国内外资深专家超过25人,并吸引了业界众多优秀专业人才的加入,迄今为止已经吸纳了海外归国具有丰富业内经验的人才15名。
中兴微电子已经完全掌握了大规模深亚微米级数字集成电路设计技术,SOC设计技术,模拟和数模混合集成电路设计技术。目前设计的芯片最大规模超过1亿门,量产工艺已达28纳米,设计条件包括所用EDA工具以及硬件运行平台的性能处于业界领先水平。
在4G通讯领域,中兴微电子芯片经历了从无到有(ZX297500)、规模外场(ZX297502)到现在的批量商用28nm LTE多模芯片(ZX297510/ZX297520)三个主要阶段,
&O&&& 早在2011年2月,就推出了国内首款TD-LTE/TD-S/LTE FDD/GSM 四模芯片ZX297500。
&O&&& 2012年3月推出首颗TD-LTE/TD-S/LTE FDD/GSM ZX297502多模商用芯片,率先通过工信部组织TD-LTE/TDS多模室内、外场功能,性能测试,在中移关键技术攻关测试中&上下行速率并发&及&TD-LTE/TD-SCDMA互操作&中表现最优。
&O&&& 2013年6月,成功研发出基于28nm工艺的ZX297510多模芯片,是首款获得中国移动LTE多模芯片平台认证的28nm LTE多模芯片,在功耗、成本、面积上面更具优势,已实现批量发货。2015年3月,ZX297520(LTE-A/LTE/WCDMA/TD-SCDMA/GSM)完成入网测试并成功商用。
我们提供的整体解决方案已经和多个终端方案厂商完成合作,已经成功在数据类类产品如数据卡、MIFI、路由器、平板电脑、行业终端等产品上成功商用。未来中兴微电子将继续加大研发投入,保持数据类终端芯片领先的同时,增强在物联网芯片、智能终端芯片上研发实力,确保公司将来在移动通讯领域核心技术和知识产权的主导地位。
主持人: 请向大家介绍中兴微电子在4G终端芯片的主要产品。
嘉 宾:我们当前主推的方案是ZX297510方案和ZX297520方案。
7510是我司自主研发的,国内首颗采用28纳米CMOS先进工艺并且一次顺利Tapeout终端芯片,7510支持TDD-LTE/FDD LTE/TD-SCDMA/GSM四模十八频,采用低功耗、低成本、高端工艺、高集成度的设计方案。采用7510平台的CPE多次入围中国移动的4G集采名单,并在国内的CPE市场占据50%以上的市场份额。7510平台在行业市场也表现不俗,采用7510平台的模块在电力等行业市场占据了较大市场份额。在11月份举行的CSIP第十届&中国芯&评比中,7510荣获了CSIP第十届&中国芯&评比&最佳市场表现产品&,和中兴物联合作的4G模块同时获得了的两项大奖。
ZX297520沿用28纳米工艺,基于ZX297510芯片,增加对WCDMA的支持,在LTE速率上也有卓越的提升,下行速率可以达到300Mbps,上行速率可以达到100Mbps,将为用户带来极致畅快的4G+新体验。7520平台是业界极具性价比的平台,竞争力很强,不光可以支持国内移动和联通市场,同时还突破到国际市场,在巴西,东南亚,俄罗斯等地都获得当地大运营商的认可,并屡屡斩获订单。
主持人:NB-IOT是当前的热点之一,请问中兴微电子在NB-IOT及其他IOT技术上的是怎么考虑的?
嘉 宾:IOT是无线通讯的重要领域。据通信世界网消息(CWW) 据咨询公司的报告,至2025年物联网的连接数将达到700亿,远远超过人和人通讯的链接数。中兴微电子在物联网领域已经耕耘多年,拥有广告、能源、监控、交通、计量、智慧城市等多个物联网行业的解决方案,并已实现规模商用,对IOT行业的需求有深入理解。我们也有众多IOT客户,以及成熟渠道,以及配套的行业技术支持团队。
IOT的需求是多方面的,不能单单聚焦在NB-IOT。从现在看,对速率的需求向两个维度发展,高速和低速。
在高速方面,目前行业采用CAT3、CAT4的产品比较多,CAT6的产品有部分模块公司的产品也实现了商业,但发货量不大。但随着安防、广告、交通等业务需求的驱动,CAT6甚至CAT12的需求会逐步得到提升。此高速方向会延续到5G的时代。
在低速方面,物联网面向海量连接,在一些物联网的场景下,例如智能抄表,生态农业,智慧停车,智能小区,智能建筑等场景, 对广覆盖、低功耗、低成本终端的需求更为明确。目前广泛商用的2G/3G/4G、WLAN及其他无线技术都无法满足这些挑战,而NB-IoT,即基于LTE的窄带IoT技术,这些物联网场景的需求。对此,我们已经积极布局,今年06月联合中国移动打通基站到NB-IOT终端的信令流程,GSMA上海展出;今年09月发布NB-IOT原型芯片,北京国际通信展展出;2017年H1我们会发布NB-IOT商用芯片Wisefone7100。
除了上述两个方向外,还有一个技术需引起关注:CAT-M技术。NB-IOT虽然是一个IOT很重要的技术,但在某些场景不能满足需求,因它不支持切换,对移动性支持差,尤其不支持语音,不能满足物流监控、老人或者儿童监护等场景的需求,而这正是CAT-M技术解决的问题。目前美国ATT、Verizon等运营商对CAT-M的重视程度高于NB-IOT,中国运营商也在试点该技术。中兴微电子已经完成协议预研,可以按照中国运营商建设计划配合协议对接、样片测试和最终商用。
主持人: 据了解,国家大基金已入主中兴微电子,是否意味中兴微电子已经独立运营?如何平衡中兴通讯和外部客户关系?
嘉 宾:从2014年起,中兴微电子4G多模芯片正式开始从中兴内部走向前台,不仅为中兴内部提供自研终端芯片,同时也向外部客户提供4G多模芯片解决方案。
2015国家集成电路产业投资基金增资24个亿,占股24%,一方面鼓励我们中兴微电子在研发、销售加大投入,同时也给中兴微芯片的市场化、国际化吃下了一颗定心丸。搭载中兴微手机芯片的终端,已经在欧洲,南美,亚太,东南亚等多个国家、多个运营商展开合作,为中兴微电子终端芯片出海奠定坚实基础。
对客户的支持,我们秉着公平,公正,公开的态度,对外全面市场化,保证客户对外公平竞争。
主持人:在获得了国家产业基金的巨资注入后,中兴微电子在终端芯片的后续规划上有什么变化?
嘉 宾:首先非常感谢国家基金的注入,这是对中兴微电子过去10多年工作的肯定和激励。在资金注入后,中兴微电子在4G终端芯片的规划布局将更加全面和具备持续性。
其次我们注意到物联网的发展机会即将到来,特别是基于LTE的物联网将在2017年后进入爆发阶段。LTE的高频谱利用率,基于IPV6的架构,为基于蜂窝网的物联网发展带来了机会。我们将在未来推出基于LTE的CAT1,CAT-M,NB IOT等系列物联网专用芯片,不断降低芯片成本,芯片功耗,为客户提供最佳的物联网芯片平台解决方案。
最后,我们也会利用已经成熟的4G modem技术,打造智能手机的SOC芯片平台,我们的智能芯片平台强调安全性和性价比,同时在高端市场会借力modem技术的领先并形成差异化卖点,在未来会有一个更加全面的布局。
主持人:技术支持如何更好的支持客户?
嘉 宾:我们的客户支持团队由研发团队的精英组成。从基带、射频、驱动、modem协议、网络路由、等多方面技术问题全方位覆盖,当前支持20多个客户,40多个项目,有正规的流程和支持系统,对问题实现快速响应,确保满足客户的产品里程碑时间。
我们的客户支持团队由FAE和AE 2部分组成,根据问题紧急程度,随时到现场定位解决。
主持人:国产自主研发芯片打破国外技术垄断,成功获得商用后的意义。
嘉 宾:打破了国外芯片厂商长期垄断的地位,对于国内芯片厂商也是极大的鼓舞,这个也是对国家在芯片产业上大力扶持的最好回报。对于中兴集团公司而言,它将扮演非常重要地角色,可以进一步提升整个公司的核心竞争力,掌握手机芯片的先进核心技术,对于中兴集团公司在应对市场的风云变幻也将更加从容。另外自研芯片在成本上更具优势,作为终端产业链上的一个重要环节,芯片成本的降低,会催进整个产业的发展,为客户带来更多的实惠。
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
上周,苹果中国已经在官网暗示,全新iPad 4G版本将要上市,没想到它现在已经火速开卖。
发表于: 14:36:00
北京时间9月21日早间消息,周三发表的多篇Apple Watch Series 3评测都显示,这款产品存在LTE连接问题,导致苹果股价早盘下挫约2.5%。
发表于: 09:52:05
Apple Watch Series 3 的媒体评测已经出炉,对于设备的全新 LTE 蜂窝移动网络功能以及续航,各大媒体的看法不一,喜忧参半。
发表于: 09:51:04
三大运营商于近日公布了2017年8月份运营数据,联通固网宽带城池“失守”。
发表于: 09:03:38
9月20日消息,中国移动刚刚公布8月份营运数据。本月4G用户累计数目为6.16亿户,增长1085.2万户。
发表于: 13:08:58
在是否允许乘客飞行途中使用电子设备这个问题上,国内民航业终于决定向国际趋势靠拢。日前,民航局表示,将允许航空公司为主体对便携式电子设备的影响进行评估,并制定相应的管理和使用政策。
发表于: 15:12:11
根据全球电信企业高管透露,行业目前已经临近转折点。当转折点逼近时,他们的业务可能会在此过程中遭受巨大损失,但是他们还将继续开展各项业务。
发表于: 10:05:48
市民黄女士网购20多元的垃圾袋后,接到一个“快递员”电话,说货丢了要赔钱给她,结果引导黄女士一步步操作,最终竟骗走她18万元。
发表于: 09:58:42
工信部严管VPN市场,使得不少外贸企业和跨国企业的日常运营受到影响。对于外贸行业来说,VPN及其重要。大家比较熟悉的VPN有GreenVPN、老牌的“蓝灯”、天行、白鸽、旗鱼、游戏用的迅游加速器等,哪些VPN更好用呢?小编就不同VPN的使用体验对部分同事进行了采访。
发表于: 09:10:54
日前,WePhone 创始人苏享茂在留下一份网帖后跳楼自杀,同时宣布WePhone将停止运营。
发表于: 09:08:03
2017年能耗过半,年初定的哪些“小目标”没有阵亡? ……
旗下网站:
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号485芯片问题总结_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
485芯片问题总结
&&485芯片使用过程中遇到的一些问题和解决办法的总结。
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢RS485芯片_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢CC1120芯片发射失锁 及发数据超时 导致通信严重不正常的问题描述 源代码及原理图已经附上 - 硬件, 射频和私有技术 - 无线连接 - 德州仪器在线技术支持社区
CC1120芯片发射失锁 及发数据超时 导致通信严重不正常的问题描述 源代码及原理图已经附上
发表于7月前
<input type="hidden" id="hGroupID" value="24"
使用的&a href=&.cn/product/cn/CC1120& target=&extwin&>CC1120&/a>工作频点范围为410M-480M,&br>接收电路及发射功放电路分离式,未使用T/RX SW芯片管脚,此管脚外部上拉。&br>频率切换方式为将芯片复位,更改寄存器基本配置中频率设置寄存器,然后将芯片寄存器全部初始化,&/p>
&p>遇到的问题如下:&br>1.若芯片工作在410M-420M之间或460M-480M之间时,使用频谱仪观察发的射频信号,信号处于失锁状态,在510M频率附近失锁震荡,且频谱仪观察范围很宽。&br>2.发送模式采用FIFO模式,波特率为9600,2GFSK,帧格式为PRE + SYN + RAW DATA,一包RAW DATA为96bytes,理论发射时间为87ms;设置发射超时为200ms,会出现发数据超时的现象(无GDO发射完成的反馈)。&br>3.一旦遇到发超时后,更改任何频点,&a href=&.cn/product/cn/cc1120& target=&extwin&>cc1120&/a>仍然工作异常,发送数据始终超时,&br>4.若遇到问题3描述的情况,将&a href=&.cn/product/cn/cc1120& target=&extwin&>cc1120&/a>在455M频点下断电&&上电初始化,芯片又可以恢复正常工作。虽然每次频率切换时均对芯片进行了复位,但只有将芯片断电重启才能够恢复正常。&/p>
&p>&span style=&color:#ff0000;&>&strong>请问如何更改寄存器配置或者硬件连接方式解决此问题???很急很关键!!!!!!&/strong>&/span>&/p>
&p>具体CC120相关连接原理图连接如下(如果图片不清晰 附加中有PDF格式):&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/45/.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/45/.png& border=&0& alt=& &>&/a>&/p>
&p>&a href=&.cn/product/cn/CC1120& target=&extwin&>CC1120&/a>芯片初始化及频点设置、数据发送程序如下&br>typedef struct&br>{&br> U16&br> U8&br>}cc112x_&/p>
&p>const cc112x_reg cc112x_reg_4800[]=&br>{&br> {IOCFG3, 0xB0},&br> {IOCFG2, 0x06},&br> {IOCFG1, 0xB0},&br> {IOCFG0, 0x06},&br> {SYNC3, 0xD3},&br> {SYNC2, 0x91},&br> {SYNC1, 0xD3},&br> {SYNC0, 0x91},&br> {SYNC_CFG1, 0x0B},&br> {DEVIATION_M, 0x06},&br> {MODCFG_DEV_E, 0x0B},&br> {DCFILT_CFG, 0x1C},&br> {PREAMBLE_CFG1, 0x18},&br> {FREQ_IF_CFG, 0x40},&br> {IQIC, 0xC6},&br> {CHAN_BW, 0x08},&br> {MDMCFG0, 0x05},&br> {SYMBOL_RATE2, 0x73},&br> {SYMBOL_RATE1, 0xA9},&br> {SYMBOL_RATE0, 0x2A},&br> {AGC_REF, 0x20},&br> {AGC_CS_THR, 0x19},&br> {AGC_CFG1, 0xA9},&br> {AGC_CFG0, 0xCF},&br> {FIFO_CFG, 0x00},&br> {SETTLING_CFG, 0x0B},&br> {FS_CFG, 0x14},&br>// {WOR_CFG0, 0x20},&br>// {WOR_EVENT0_LSB, 0xBA},&br> &br> {PKT_CFG2, 0x04},&br> {PKT_CFG1, 0x00},&br> {PKT_CFG0, 0x00},&br> &br> {PA_CFG2, 0x70},&br> {PA_CFG1, 0x56},&br> {PA_CFG0, 0x7C},&br> &br> {PKT_LEN, 0xFF},&br> {IF_MIX_CFG, 0x00},&br> {FREQOFF_CFG, 0x22},&br> {FREQ2, 0x70},&br> {FREQ1, 0x80},&br> {FREQ0, 0x00},&br> &br> {FS_DIG1, 0x00},&br> {FS_DIG0, 0x5F},&br> &br> {FS_CAL1, 0x40},&br> {FS_CAL0, 0x0E},&br> &br> {FS_DIVTWO, 0x03},&br> &br> {FS_DSM0, 0x33},&br> &br> {FS_DVC0, 0x17},&br> {FS_PFD, 0x50},&br> {FS_PRE, 0x6E},&br> {FS_REG_DIV_CML, 0x14},&br> {FS_SPARE, 0xAC},&br> {FS_VCO0, 0xB4},&br> &br> {XOSC5, 0x0E},&br> {XOSC3, 0x03},&br> {XOSC1, 0x03},&br>};&/p>
&p>#define RF_WAIT_RES 1&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_SetSingleCmd&br>* 描述 : 单命令发送&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_SetSingleCmd(U8 cmd)&br>{&br> //U8 ucT&br> &br> RF_CS_LOW();&br> &br>// ucTemp = RF_MISO_VAL();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(cmd);&br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_SetBurstCmd&br>* 描述 : 向指定地址发送多条命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_SetBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen)&br>{&br> U16&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0x3F);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0x40 | ucAddr);&br> &br> for (i = 0; i & i++)&br> {&br> RF_SPI_SendByte(*pcmd++);&br> }&br> &br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_ReadBurstCmd&br>* 描述 : 从指定地址读取多条命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_ReadBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen)&br>{&br> U16&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0x3F);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0xC0 | ucAddr);&br> &br> for (i = 0; i & i++)&br> {&br> *pcmd++ = RF_SPI_SendByte(0);&br> }&br> &br> RF_CS_HIGH();&br>}&/p>
&p>&br>/*******************************************************************************&br>* 名称 : RF_CC112x_SetExtBurstCmd&br>* 描述 : 向扩展地址发送多条命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_SetExtBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen)&br>{&br> U16&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0x40 | 0x2F);&br> RF_SPI_SendByte(ucAddr);&br> for (i = 0; i & i++)&br> {&br> RF_SPI_SendByte(*pcmd++);&br> }&br> &br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_ReadExtBurstCmd&br>* 描述 : 从扩展地址读取多条命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_ReadExtBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen)&br>{&br> U16&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif&br> RF_SPI_SendByte(0xC0 | 0x2F);&br> RF_SPI_SendByte(ucAddr);&br> &br> for (i = 0; i & i++)&br> {&br> *pcmd++ = RF_SPI_SendByte(0);&br> }&br> &br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_SetCmd&br>* 描述 : 向指定地址发送命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_SetCmd(U16 addr, U8 cmd)&br>{&br> U8 ucA&br> //U8 ucT&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br> //ucTemp = RF_MISO_VAL();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(ucAddr);&br> RF_SPI_SendByte(cmd);&br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_ReadCmd&br>* 描述 : 从指定地址读取多条命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_ReadCmd(U16 addr, U8 *pcmd)&br>{&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0x80 | ucAddr);&br> *pcmd = RF_SPI_SendByte(0);&br> RF_CS_HIGH();&br>}&/p>
&p>&br>/*******************************************************************************&br>* 名称 : RF_CC112x_SetExtCmd&br>* 描述 : 向扩展地址发送命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_SetExtCmd(U16 addr, U8 cmd)&br>{&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0x2F);&br> RF_SPI_SendByte(ucAddr);&br> RF_SPI_SendByte(cmd);&br> RF_CS_HIGH();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_ReadExtCmd&br>* 描述 : 从扩展地址读取命令&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_ReadExtCmd(U16 addr, U8 *pcmd)&br>{&br> U8 ucA&/p>
&p>ucAddr = (U8)(addr & 0xFF);&br> RF_CS_LOW();&br>#if RF_WAIT_RES &br> while(RF_MISO_VAL() == 1);&br>#endif &br> RF_SPI_SendByte(0x80 | 0x2F);&br> RF_SPI_SendByte(ucAddr);&br> *pcmd = RF_SPI_SendByte(0);&br> RF_CS_HIGH();&br>}&br>/*******************************************************************************&br>* 名称 : RF_CC112x_Reset&br>* 描述 : CC112x 复位&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Reset(void)&br>{&br> RF_CC112x_SetSingleCmd(SRES);&br> //RF_RST_LOW();&br> //Delay_ms(1);&br> //RF_RST_HIGH();&br> Delay_ms(5);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Fifo_Byte&br>* 描述 : FIFO中填入1byte&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Fifo_Byte(U8 byte) &br>{&br> RF_CC112x_SetCmd(TXFIFO, byte);&br>}&/p>
&p>&br>/*******************************************************************************&br>* 名称 : RF_SetTx&br>* 描述 : 设置为发射状态&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_SetTx(void)&br>{&br> RF_GDO0_Int_Disable();&br> &br> RF_RX_POWER_DISABLE;&br> RF_TX_POWER_ENABLE;&br> RF_PA_SetVal(guiPA_Val);&br> RF_PA_CTL_ENABLE;&br> &br> /* Change state to TX, initiating */&br> RF_CC112x_SetSingleCmd(SFRX);&br>// RF_CC112x_SetSingleCmd(SFTX);&br> RF_CC112x_SetSingleCmd(STX);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_SetRx&br>* 描述 : 设置为接收状态&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_SetRx(void)&br>{&br> RF_TX_POWER_DISABLE;&br> RF_PA_CTL_DISABLE;&br> RF_PA_SetVal(0);&br> RF_RX_POWER_ENABLE;&br> &br> /* Strobe RX to initiate the recieve chain */&br> RF_CC112x_SetSingleCmd(SFRX);&br> RF_CC112x_SetSingleCmd(SFTX);&br> RF_CC112x_SetSingleCmd(SRX);&br> &br> RF_GDO0_Int_Enable();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_SetIDLE&br>* 描述 : 设置为空闲&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_SetIDLE(void)&br>{&br> RF_GDO0_Int_Disable();&br> &br> RF_RX_POWER_DISABLE;&br> RF_TX_POWER_DISABLE;;&br> RF_PA_SetVal(0);&br> RF_PA_CTL_DISABLE;&br> &br> /* Flush the FIFO&#39;s */&br> RF_CC112x_SetSingleCmd(SFRX);&br> RF_CC112x_SetSingleCmd(SFTX);&br> &br> /* Force transciever idle state */&br> RF_CC112x_SetSingleCmd(SIDLE);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Rcv_On&br>* 描述 : 设置cc112x进入接收状态&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Rcv_On(void)&br>{&br> RF_SetRx();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Set_PacketLen&br>* 描述 : 设置接收或者发送长度&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Set_PacketLen(U8 ucLen)&br>{&br> U8 regs_uint8;&/p>
&p>/* disable FIFO mode*/&br> regs_uint8 = 0x46;&br> RF_CC112x_SetCmd(MDMCFG1, regs_uint8);&/p>
&p>/* disable FIFO mode*/&br> regs_uint8 = 0x05;&br> RF_CC112x_SetCmd(MDMCFG0, regs_uint8);&br> &br> /* configure set_rf_packet_length */&br> regs_uint8 = ucL&br> RF_CC112x_SetCmd(PKT_LEN, regs_uint8);&/p>
&p>/* configure set_rf_packet_lengthe */&br> regs_uint8 = 0x04;&br> RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);&br> &br> &br> regs_uint8 = 0x00;&br> RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Wait_TxEnd&br>* 描述 : 数据接收&br>* 输入 : ucTimeOut:超时时间 0:无超时 &br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Wait_TxEnd(U8 ucTimeOut)&br>{&br> U16&br> U8 reg_&br> U8 ucGDO_V&br> &br> /* check that we are still in RX mode before entering wait for RX end */&br> RF_CC112x_ReadExtCmd(MARCSTATE, &reg_status);&/p>
&p>/* filter out only the status section of the register values */&br> reg_status = (reg_status & 0x1F);&/p>
&p>// OSTimeDlyHMSM(0, 0, 0, 10);&/p>
&p>gucLastGDO_Sta = 0;&br> &br> /* check for not idle mode */&br> if(!(reg_status == MARCSTATE_IDLE)) &br> {&br> if (ucTimeOut == 0)&br> {&br> while (1)&br> {&br> OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> ucGDO_Val = RF_GDO0_VALUE();&br> if ((gucLastGDO_Sta == 1) && (ucGDO_Val == 0))&br> {&br> //OSTimeDlyHMSM(0, 0, 0, 10);&br>&br> }&br> gucLastGDO_Sta = ucGDO_V&br> }&br> }&br> else&br> {&br> for (i = 0; i & ucTimeO i++)&br> {&br> OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> ucGDO_Val = RF_GDO0_VALUE();&br> if ((gucLastGDO_Sta == 1) && (ucGDO_Val == 0))&br> {&br> //OSTimeDlyHMSM(0, 0, 0, 10);&br>&br> }&br> gucLastGDO_Sta = ucGDO_V&br> }&br> }&br> &br> }&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Reg_Init&br>* 描述 : CC112x寄存器初始化&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Reg_PreInit(void)&br>{&br> U16&br> &br> size = sizeof(cc112x_reg_4800);&br> &br> memcpy(cc112x_reg_buf, cc112x_reg_4800, size);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Reg_Init&br>* 描述 : CC112x寄存器初始化&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Reg_Init(void)&br>{&br> U16&br> U16 uiL&br> U8 ucT&br> U16&br> &br> size = sizeof(cc112x_reg_4800);&br> &br> uiLen = size/sizeof(cc112x_reg);&br> &br> for (i = 0; i & uiL i++)&br> {&br> if (cc112x_reg_buf[i].addr & 0x2F)&br> {&br> RF_CC112x_SetCmd(cc112x_reg_buf[i].addr, cc112x_reg_buf[i].data);&br> }&br> else&br> {&br> RF_CC112x_SetExtCmd(cc112x_reg_buf[i].addr, cc112x_reg_buf[i].data);&br> }&br> }&/p>
&p>RF_CC112x_ReadCmd(IOCFG3, &ucTemp);&br> &br> RF_CC112x_Set_PacketLen(RF_PACKET_LEN);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_Init&br>* 描述 : 射频模块相关驱动初始化&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_Init(void)&br>{&br> //接口初始化&br> RF_Port_inita();&br> //模块复位&br> RF_CC112x_Reset();&br> RF_CC112x_Reg_PreInit();&br> //寄存器初始化&br> RF_CC112x_Reg_Init();&br> //外部中断初始化&br> RF_GDO0_inita();&br> //设置空闲状态&br> RF_SetIDLE();&/p>
&p>Delay_ms(2);&br> &br> //设置接收状态&br> RF_SetRx();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Cal_Freq&br>* 描述 : 计算频率&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>U32 RF_CC112x_Cal_Freq(U32 freq)&br>{&br> U32 freq_regs_uint32;&br> double f_&br> &br> f_vco = (double)freq * 256;&br> &br> f_vco = f_vco / 15625;&br> &br> freq_regs_uint32 = (uint32) (f_vco + 0.5);&br> &br> return freq_regs_uint32;&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Set_Freq&br>* 描述 : 设置频率&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Set_Freq(U32 freq_regs_uint32)&br>{&br>// U8 freq_regs[3];&br>// U8 temp_regs[3];&br>// U32 freq_regs_uint32;&br> //U32 f_&br>// double f_&/p>
&p>//设置IDLE状态&br> RF_SetIDLE();&br> &br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> /* return the frequency word */&br> cc112x_reg_buf[38].data = ((uint8*)&freq_regs_uint32)[0];&br> cc112x_reg_buf[37].data = ((uint8*)&freq_regs_uint32)[1];&br> cc112x_reg_buf[36].data = ((uint8*)&freq_regs_uint32)[2];&br> &br> RF_CC112x_Reset();&br> &br> RF_CC112x_Reg_Init();&/p>
&p>/* write the frequency word to the transciever */&br> //RF_CC112x_SetExtBurstCmd(FREQ2, freq_regs, 3);&br> &br> //RF_CC112x_ReadExtCmd(FREQ2, &temp_regs[2]);&br> //RF_CC112x_ReadExtCmd(FREQ1, &temp_regs[1]);&br> //RF_CC112x_ReadExtCmd(FREQ0, &temp_regs[0]);&br> &br> //RF_CC112x_ReadExtBurstCmd(FREQ2,temp_regs, 3);&br> &br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> //设置接收状态&br>// RF_SetRx();&br>// RF_CC112x_SetSingleCmd(SRX);&br> &br>// OSTimeDlyHMSM(0, 0, 0, 5);&br>// Delay_ms(2);&br> &br> /* Force transciever idle state */&br>// RF_CC112x_SetSingleCmd(SIDLE);&/p>
&p>// /* write the frequency word to the transciever */&br>// RF_CC112x_SetExtBurstCmd(FREQ2, freq_regs, 3);&br>// &br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> Delay_ms(2);&br> &br> //设置接收状态&br> RF_SetRx();&br> &br>// OSTimeDlyHMSM(0, 0, 0, 5);&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Tran_Data&br>* 描述 : 发射调制数据&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Tran_Data(U8 *pData, U16 uiLen)&br>{&br> //关闭外部中断&br>// RF_SetIDLE();&br> &br> //Delay_ms(2);&br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> &br>// RF_CC112x_Set_PacketLen(uiLen);&br> &br> /* Write packet to TX FIFO */&br> RF_CC112x_SetBurstCmd(TXFIFO, pData, uiLen);&br>// OSTimeDlyHMSM(0, 0, 0, 5);&br>// Delay_ms(2);&br> //设置发射状态&br> RF_SetTx();&br> &br> //等待发射结束&br> RF_CC112x_Wait_TxEnd(RF_TX_TIMEOUT);&br> &br> //设置接收状态&br> RF_SetRx();&br> &br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Rcv_Data&br>* 描述 : 数据接收&br>* 输入 : pData:待接收数据 &br>* 输出 : 无&br>* 返回 : 数据长度&br>*******************************************************************************/&br>U16 RF_CC112x_Rcv_Data(U8 *pData)&br>{&br> U8 pktL&/p>
&p>/* Read number of bytes in RX FIFO */&br> RF_CC112x_ReadExtCmd(NUM_RXBYTES, &pktLen);&br> pktLen = pktLen & 0x7F;&/p>
&p>/* make sure the packet size is appropriate, that is 1 -& buffer_size */&br> if ((pktLen != 0) && (pktLen &= RF_PACKET_LEN)) &br> {&br> /* retrieve the FIFO content */&br> RF_CC112x_ReadBurstCmd(RXFIFO, pData, pktLen);&br> &br> //RF_SetRx();&br> &br> /* Strobe RX to initiate the recieve chain */&br> RF_CC112x_SetSingleCmd(SFRX);&br> RF_CC112x_SetSingleCmd(SFTX);&br> RF_CC112x_SetSingleCmd(SRX);&br> &br> //RF_GDO0_Int_Enable();&/p>
&p>} &br> else &br> {&/p>
&p>/* if the length returned by the transciever does not make sense, flush it */&br> pktLen = 0; // Return 0 indicating a failure&br> RF_CC112x_SetSingleCmd(SFRX); // Flush RXFIFO&/p>
&p>/* return status information, CRC OK or NOT OK */&br> return (pktLen);&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Tran_Carrier&br>* 描述 : 设置进入载波发射状态&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Tran_Carrier(void)&br>{&br> U8 regs_uint8;&/p>
&p>RF_SetIDLE();&br> &br> //Delay_ms(2);&br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> /* disable FIFO mode*/&br> regs_uint8 = 0x06;&br> RF_CC112x_SetCmd(MDMCFG1, regs_uint8);&/p>
&p>/* configure continuous mode*/&br> RF_CC112x_ReadCmd(PA_CFG2, &regs_uint8);&br> regs_uint8 = regs_uint8 | 0x40;&br> RF_CC112x_SetCmd(PA_CFG2, regs_uint8);&/p>
&p>/* configure set_tx_modulated_test_mode */&br> regs_uint8 = 0x06;&br> RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);&/p>
&p>regs_uint8 = 0x40;&br> RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);&br> &br> /* disable the modulator */&br> regs_uint8 = 0x01;&br> RF_CC112x_SetExtCmd(CFM_DATA_CFG, regs_uint8);&br> &br> RF_CC112x_Fifo_Byte(0xFF);&br> &br> RF_SetTx();&br>}&/p>
&p>/*******************************************************************************&br>* 名称 : RF_CC112x_Tran_noMCU&br>* 描述 : 设置进入发射cc112x内部调制数据&br>* 输入 : 无&br>* 输出 : 无&br>* 返回 : 无&br>*******************************************************************************/&br>void RF_CC112x_Tran_noMCU(void)&br>{&br> U8 regs_uint8;&/p>
&p>RF_SetIDLE();&br> &br> //Delay_ms(2);&br>// OSTimeDlyHMSM(0, 0, 0, 5);&br> &br> /* disable FIFO mode*/&br> regs_uint8 = 0x46;&br> RF_CC112x_SetCmd(MDMCFG1, regs_uint8);&/p>
&p>/* disable FIFO mode*/&br> regs_uint8 = 0x05;&br> RF_CC112x_SetCmd(MDMCFG0, regs_uint8);&/p>
&p>/* configure set_tx_modulated_test_mode */&br> regs_uint8 = 0x06;&br> RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);&/p>
&p>regs_uint8 = 0x40;&br> RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);&/p>
&p>/* enable the modulator */&br> regs_uint8 = 0x00;&br> RF_CC112x_SetExtCmd(CFM_DATA_CFG, regs_uint8);&br> &br> /* load a random byte into the FIFO, this causes the modulator to start */&br> RF_CC112x_SetCmd(TXFIFO, regs_uint8);&br> &br> RF_CC112x_Fifo_Byte(0xFF);&br> &br> RF_SetTx();&br>}&/p>&div style=&clear:&>&/div>" />
CC1120芯片发射失锁 及发数据超时 导致通信严重不正常的问题描述 源代码及原理图已经附上
此问题尚无答案
All Replies
使用的工作频点范围为410M-480M,接收电路及发射功放电路分离式,未使用T/RX SW芯片管脚,此管脚外部上拉。频率切换方式为将芯片复位,更改寄存器基本配置中频率设置寄存器,然后将芯片寄存器全部初始化,
遇到的问题如下:1.若芯片工作在410M-420M之间或460M-480M之间时,使用频谱仪观察发的射频信号,信号处于失锁状态,在510M频率附近失锁震荡,且频谱仪观察范围很宽。2.发送模式采用FIFO模式,波特率为9600,2GFSK,帧格式为PRE + SYN + RAW DATA,一包RAW DATA为96bytes,理论发射时间为87ms;设置发射超时为200ms,会出现发数据超时的现象(无GDO发射完成的反馈)。3.一旦遇到发超时后,更改任何频点,仍然工作异常,发送数据始终超时,4.若遇到问题3描述的情况,将在455M频点下断电&&上电初始化,芯片又可以恢复正常工作。虽然每次频率切换时均对芯片进行了复位,但只有将芯片断电重启才能够恢复正常。
请问如何更改寄存器配置或者硬件连接方式解决此问题???很急很关键!!!!!!
具体CC120相关连接原理图连接如下(如果图片不清晰 附加中有PDF格式):
芯片初始化及频点设置、数据发送程序如下typedef struct{ U16 U8}cc112x_
const cc112x_reg cc112x_reg_4800[]={ {IOCFG3, 0xB0}, {IOCFG2, 0x06}, {IOCFG1, 0xB0}, {IOCFG0, 0x06}, {SYNC3, 0xD3}, {SYNC2, 0x91}, {SYNC1, 0xD3}, {SYNC0, 0x91}, {SYNC_CFG1, 0x0B}, {DEVIATION_M, 0x06}, {MODCFG_DEV_E, 0x0B}, {DCFILT_CFG, 0x1C}, {PREAMBLE_CFG1, 0x18}, {FREQ_IF_CFG, 0x40}, {IQIC, 0xC6}, {CHAN_BW, 0x08}, {MDMCFG0, 0x05}, {SYMBOL_RATE2, 0x73}, {SYMBOL_RATE1, 0xA9}, {SYMBOL_RATE0, 0x2A}, {AGC_REF, 0x20}, {AGC_CS_THR, 0x19}, {AGC_CFG1, 0xA9}, {AGC_CFG0, 0xCF}, {FIFO_CFG, 0x00}, {SETTLING_CFG, 0x0B}, {FS_CFG, 0x14},// {WOR_CFG0, 0x20},// {WOR_EVENT0_LSB, 0xBA},
{PKT_CFG2, 0x04}, {PKT_CFG1, 0x00}, {PKT_CFG0, 0x00},
{PA_CFG2, 0x70}, {PA_CFG1, 0x56}, {PA_CFG0, 0x7C},
{PKT_LEN, 0xFF}, {IF_MIX_CFG, 0x00}, {FREQOFF_CFG, 0x22}, {FREQ2, 0x70}, {FREQ1, 0x80}, {FREQ0, 0x00},
{FS_DIG1, 0x00}, {FS_DIG0, 0x5F},
{FS_CAL1, 0x40}, {FS_CAL0, 0x0E},
{FS_DIVTWO, 0x03},
{FS_DSM0, 0x33},
{FS_DVC0, 0x17}, {FS_PFD, 0x50}, {FS_PRE, 0x6E}, {FS_REG_DIV_CML, 0x14}, {FS_SPARE, 0xAC}, {FS_VCO0, 0xB4},
{XOSC5, 0x0E}, {XOSC3, 0x03}, {XOSC1, 0x03},};
#define RF_WAIT_RES 1
/******************************************************************************** 名称 : RF_CC112x_SetSingleCmd* 描述 : 单命令发送* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_SetSingleCmd(U8 cmd){ //U8 ucT
RF_CS_LOW(); // ucTemp = RF_MISO_VAL();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(cmd); RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_SetBurstCmd* 描述 : 向指定地址发送多条命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_SetBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen){ U16 U8 ucA
ucAddr = (U8)(addr & 0x3F); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0x40 | ucAddr);
for (i = 0; i & i++) { RF_SPI_SendByte(*pcmd++); }
RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_ReadBurstCmd* 描述 : 从指定地址读取多条命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_ReadBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen){ U16 U8 ucA
ucAddr = (U8)(addr & 0x3F); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0xC0 | ucAddr);
for (i = 0; i & i++) { *pcmd++ = RF_SPI_SendByte(0); }
RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_SetExtBurstCmd* 描述 : 向扩展地址发送多条命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_SetExtBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen){ U16 U8 ucA
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0x40 | 0x2F); RF_SPI_SendByte(ucAddr); for (i = 0; i & i++) { RF_SPI_SendByte(*pcmd++); }
RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_ReadExtBurstCmd* 描述 : 从扩展地址读取多条命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_ReadExtBurstCmd(U16 addr, U8 *pcmd, U16 cmdlen){ U16 U8 ucA
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif RF_SPI_SendByte(0xC0 | 0x2F); RF_SPI_SendByte(ucAddr);
for (i = 0; i & i++) { *pcmd++ = RF_SPI_SendByte(0); }
RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_SetCmd* 描述 : 向指定地址发送命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_SetCmd(U16 addr, U8 cmd){ U8 ucA //U8 ucT
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW(); //ucTemp = RF_MISO_VAL();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(ucAddr); RF_SPI_SendByte(cmd); RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_ReadCmd* 描述 : 从指定地址读取多条命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_ReadCmd(U16 addr, U8 *pcmd){ U8 ucA
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0x80 | ucAddr); *pcmd = RF_SPI_SendByte(0); RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_SetExtCmd* 描述 : 向扩展地址发送命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_SetExtCmd(U16 addr, U8 cmd){ U8 ucA
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0x2F); RF_SPI_SendByte(ucAddr); RF_SPI_SendByte(cmd); RF_CS_HIGH();}
/******************************************************************************** 名称 : RF_CC112x_ReadExtCmd* 描述 : 从扩展地址读取命令* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_ReadExtCmd(U16 addr, U8 *pcmd){ U8 ucA
ucAddr = (U8)(addr & 0xFF); RF_CS_LOW();#if RF_WAIT_RES
while(RF_MISO_VAL() == 1);#endif
RF_SPI_SendByte(0x80 | 0x2F); RF_SPI_SendByte(ucAddr); *pcmd = RF_SPI_SendByte(0); RF_CS_HIGH();}/******************************************************************************** 名称 : RF_CC112x_Reset* 描述 : CC112x 复位* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Reset(void){ RF_CC112x_SetSingleCmd(SRES); //RF_RST_LOW(); //Delay_ms(1); //RF_RST_HIGH(); Delay_ms(5);}
/******************************************************************************** 名称 : RF_CC112x_Fifo_Byte* 描述 : FIFO中填入1byte* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Fifo_Byte(U8 byte) { RF_CC112x_SetCmd(TXFIFO, byte);}
/******************************************************************************** 名称 : RF_SetTx* 描述 : 设置为发射状态* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_SetTx(void){ RF_GDO0_Int_Disable();
RF_RX_POWER_DISABLE; RF_TX_POWER_ENABLE; RF_PA_SetVal(guiPA_Val); RF_PA_CTL_ENABLE;
/* Change state to TX, initiating */ RF_CC112x_SetSingleCmd(SFRX);// RF_CC112x_SetSingleCmd(SFTX); RF_CC112x_SetSingleCmd(STX);}
/******************************************************************************** 名称 : RF_SetRx* 描述 : 设置为接收状态* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_SetRx(void){ RF_TX_POWER_DISABLE; RF_PA_CTL_DISABLE; RF_PA_SetVal(0); RF_RX_POWER_ENABLE;
/* Strobe RX to initiate the recieve chain */ RF_CC112x_SetSingleCmd(SFRX); RF_CC112x_SetSingleCmd(SFTX); RF_CC112x_SetSingleCmd(SRX);
RF_GDO0_Int_Enable();}
/******************************************************************************** 名称 : RF_SetIDLE* 描述 : 设置为空闲* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_SetIDLE(void){ RF_GDO0_Int_Disable();
RF_RX_POWER_DISABLE; RF_TX_POWER_DISABLE;; RF_PA_SetVal(0); RF_PA_CTL_DISABLE;
/* Flush the FIFO&#39;s */ RF_CC112x_SetSingleCmd(SFRX); RF_CC112x_SetSingleCmd(SFTX);
/* Force transciever idle state */ RF_CC112x_SetSingleCmd(SIDLE);}
/******************************************************************************** 名称 : RF_CC112x_Rcv_On* 描述 : 设置cc112x进入接收状态* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Rcv_On(void){ RF_SetRx();}
/******************************************************************************** 名称 : RF_CC112x_Set_PacketLen* 描述 : 设置接收或者发送长度* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Set_PacketLen(U8 ucLen){ U8 regs_uint8;
/* disable FIFO mode*/ regs_uint8 = 0x46; RF_CC112x_SetCmd(MDMCFG1, regs_uint8);
/* disable FIFO mode*/ regs_uint8 = 0x05; RF_CC112x_SetCmd(MDMCFG0, regs_uint8);
/* configure set_rf_packet_length */ regs_uint8 = ucL RF_CC112x_SetCmd(PKT_LEN, regs_uint8);
/* configure set_rf_packet_lengthe */ regs_uint8 = 0x04; RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);
regs_uint8 = 0x00; RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);}
/******************************************************************************** 名称 : RF_CC112x_Wait_TxEnd* 描述 : 数据接收* 输入 : ucTimeOut:超时时间 0:无超时 * 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Wait_TxEnd(U8 ucTimeOut){ U16 U8 reg_ U8 ucGDO_V
/* check that we are still in RX mode before entering wait for RX end */ RF_CC112x_ReadExtCmd(MARCSTATE, &reg_status);
/* filter out only the status section of the register values */ reg_status = (reg_status & 0x1F);
// OSTimeDlyHMSM(0, 0, 0, 10);
gucLastGDO_Sta = 0;
/* check for not idle mode */ if(!(reg_status == MARCSTATE_IDLE))
{ if (ucTimeOut == 0) { while (1) { OSTimeDlyHMSM(0, 0, 0, 5);
ucGDO_Val = RF_GDO0_VALUE(); if ((gucLastGDO_Sta == 1) && (ucGDO_Val == 0)) { //OSTimeDlyHMSM(0, 0, 0, 10); } gucLastGDO_Sta = ucGDO_V } } else { for (i = 0; i & ucTimeO i++) { OSTimeDlyHMSM(0, 0, 0, 5);
ucGDO_Val = RF_GDO0_VALUE(); if ((gucLastGDO_Sta == 1) && (ucGDO_Val == 0)) { //OSTimeDlyHMSM(0, 0, 0, 10); } gucLastGDO_Sta = ucGDO_V } }
/******************************************************************************** 名称 : RF_CC112x_Reg_Init* 描述 : CC112x寄存器初始化* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Reg_PreInit(void){ U16
size = sizeof(cc112x_reg_4800);
memcpy(cc112x_reg_buf, cc112x_reg_4800, size);}
/******************************************************************************** 名称 : RF_CC112x_Reg_Init* 描述 : CC112x寄存器初始化* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Reg_Init(void){ U16 U16 uiL U8 ucT U16
size = sizeof(cc112x_reg_4800);
uiLen = size/sizeof(cc112x_reg);
for (i = 0; i & uiL i++) { if (cc112x_reg_buf[i].addr & 0x2F) { RF_CC112x_SetCmd(cc112x_reg_buf[i].addr, cc112x_reg_buf[i].data); } else { RF_CC112x_SetExtCmd(cc112x_reg_buf[i].addr, cc112x_reg_buf[i].data); } }
RF_CC112x_ReadCmd(IOCFG3, &ucTemp);
RF_CC112x_Set_PacketLen(RF_PACKET_LEN);}
/******************************************************************************** 名称 : RF_Init* 描述 : 射频模块相关驱动初始化* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_Init(void){ //接口初始化 RF_Port_inita(); //模块复位 RF_CC112x_Reset(); RF_CC112x_Reg_PreInit(); //寄存器初始化 RF_CC112x_Reg_Init(); //外部中断初始化 RF_GDO0_inita(); //设置空闲状态 RF_SetIDLE();
Delay_ms(2);
//设置接收状态 RF_SetRx();}
/******************************************************************************** 名称 : RF_CC112x_Cal_Freq* 描述 : 计算频率* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/U32 RF_CC112x_Cal_Freq(U32 freq){ U32 freq_regs_uint32; double f_
f_vco = (double)freq * 256;
f_vco = f_vco / 15625;
freq_regs_uint32 = (uint32) (f_vco + 0.5);
return freq_regs_uint32;}
/******************************************************************************** 名称 : RF_CC112x_Set_Freq* 描述 : 设置频率* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Set_Freq(U32 freq_regs_uint32){// U8 freq_regs[3];// U8 temp_regs[3];// U32 freq_regs_uint32; //U32 f_// double f_
//设置IDLE状态 RF_SetIDLE(); // OSTimeDlyHMSM(0, 0, 0, 5);
/* return the frequency word */ cc112x_reg_buf[38].data = ((uint8*)&freq_regs_uint32)[0]; cc112x_reg_buf[37].data = ((uint8*)&freq_regs_uint32)[1]; cc112x_reg_buf[36].data = ((uint8*)&freq_regs_uint32)[2];
RF_CC112x_Reset();
RF_CC112x_Reg_Init();
/* write the frequency word to the transciever */ //RF_CC112x_SetExtBurstCmd(FREQ2, freq_regs, 3);
//RF_CC112x_ReadExtCmd(FREQ2, &temp_regs[2]); //RF_CC112x_ReadExtCmd(FREQ1, &temp_regs[1]); //RF_CC112x_ReadExtCmd(FREQ0, &temp_regs[0]);
//RF_CC112x_ReadExtBurstCmd(FREQ2,temp_regs, 3); // OSTimeDlyHMSM(0, 0, 0, 5);
//设置接收状态// RF_SetRx();// RF_CC112x_SetSingleCmd(SRX); // OSTimeDlyHMSM(0, 0, 0, 5);// Delay_ms(2);
/* Force transciever idle state */// RF_CC112x_SetSingleCmd(SIDLE);
// /* write the frequency word to the transciever */// RF_CC112x_SetExtBurstCmd(FREQ2, freq_regs, 3);// // OSTimeDlyHMSM(0, 0, 0, 5); Delay_ms(2);
//设置接收状态 RF_SetRx(); // OSTimeDlyHMSM(0, 0, 0, 5);
/******************************************************************************** 名称 : RF_CC112x_Tran_Data* 描述 : 发射调制数据* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Tran_Data(U8 *pData, U16 uiLen){ //关闭外部中断// RF_SetIDLE();
//Delay_ms(2);// OSTimeDlyHMSM(0, 0, 0, 5); // RF_CC112x_Set_PacketLen(uiLen);
/* Write packet to TX FIFO */ RF_CC112x_SetBurstCmd(TXFIFO, pData, uiLen);// OSTimeDlyHMSM(0, 0, 0, 5);// Delay_ms(2); //设置发射状态 RF_SetTx();
//等待发射结束 RF_CC112x_Wait_TxEnd(RF_TX_TIMEOUT);
//设置接收状态 RF_SetRx(); }
/******************************************************************************** 名称 : RF_CC112x_Rcv_Data* 描述 : 数据接收* 输入 : pData:待接收数据 * 输出 : 无* 返回 : 数据长度*******************************************************************************/U16 RF_CC112x_Rcv_Data(U8 *pData){ U8 pktL
/* Read number of bytes in RX FIFO */ RF_CC112x_ReadExtCmd(NUM_RXBYTES, &pktLen); pktLen = pktLen & 0x7F;
/* make sure the packet size is appropriate, that is 1 -& buffer_size */ if ((pktLen != 0) && (pktLen &= RF_PACKET_LEN))
{ /* retrieve the FIFO content */ RF_CC112x_ReadBurstCmd(RXFIFO, pData, pktLen);
//RF_SetRx();
/* Strobe RX to initiate the recieve chain */ RF_CC112x_SetSingleCmd(SFRX); RF_CC112x_SetSingleCmd(SFTX); RF_CC112x_SetSingleCmd(SRX);
//RF_GDO0_Int_Enable();
/* if the length returned by the transciever does not make sense, flush it */ pktLen = 0; // Return 0 indicating a failure RF_CC112x_SetSingleCmd(SFRX); // Flush RXFIFO
/* return status information, CRC OK or NOT OK */ return (pktLen);}
/******************************************************************************** 名称 : RF_CC112x_Tran_Carrier* 描述 : 设置进入载波发射状态* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Tran_Carrier(void){ U8 regs_uint8;
RF_SetIDLE();
//Delay_ms(2);// OSTimeDlyHMSM(0, 0, 0, 5);
/* disable FIFO mode*/ regs_uint8 = 0x06; RF_CC112x_SetCmd(MDMCFG1, regs_uint8);
/* configure continuous mode*/ RF_CC112x_ReadCmd(PA_CFG2, &regs_uint8); regs_uint8 = regs_uint8 | 0x40; RF_CC112x_SetCmd(PA_CFG2, regs_uint8);
/* configure set_tx_modulated_test_mode */ regs_uint8 = 0x06; RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);
regs_uint8 = 0x40; RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);
/* disable the modulator */ regs_uint8 = 0x01; RF_CC112x_SetExtCmd(CFM_DATA_CFG, regs_uint8);
RF_CC112x_Fifo_Byte(0xFF);
RF_SetTx();}
/******************************************************************************** 名称 : RF_CC112x_Tran_noMCU* 描述 : 设置进入发射cc112x内部调制数据* 输入 : 无* 输出 : 无* 返回 : 无*******************************************************************************/void RF_CC112x_Tran_noMCU(void){ U8 regs_uint8;
RF_SetIDLE();
//Delay_ms(2);// OSTimeDlyHMSM(0, 0, 0, 5);
/* disable FIFO mode*/ regs_uint8 = 0x46; RF_CC112x_SetCmd(MDMCFG1, regs_uint8);
/* disable FIFO mode*/ regs_uint8 = 0x05; RF_CC112x_SetCmd(MDMCFG0, regs_uint8);
/* configure set_tx_modulated_test_mode */ regs_uint8 = 0x06; RF_CC112x_SetCmd(PKT_CFG2, regs_uint8);
regs_uint8 = 0x40; RF_CC112x_SetCmd(PKT_CFG0, regs_uint8);
/* enable the modulator */ regs_uint8 = 0x00; RF_CC112x_SetExtCmd(CFM_DATA_CFG, regs_uint8);
/* load a random byte into the FIFO, this causes the modulator to start */ RF_CC112x_SetCmd(TXFIFO, regs_uint8);
RF_CC112x_Fifo_Byte(0xFF);
RF_SetTx();}
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
看上去应该是频率校准的问题。在的勘误表,说了:
Suggested Workaround For the , , , and
devices with the PARTVERSION register equal to 0x21, two manual calibrations must be performed as shown in the flow diagram Figure 1-1. The software implementation is shown in Figure 1-2. For , , , and
with the PARTVERSION register equal to 0x23, the VCO calibration issue is corrected. These devices can be calibrated using one manual calibration option (using SCAL), and the three automatic calibration options that are controlled by the SETTLING_CFG.FS_AUTOCAL setting, which is explained in the CC112x/ User&s Guide (SWRU295). Applications using the workaround calibration procedure required for PARTVERSION 0x21 can safely continue to use the workaround procedure with PARTVERSION 0x23 or higher.
你可以看看是不是这个问题,还有T/RX SW芯片管脚 如果不按参考设计连接,悬空对接收是会有些问题的。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.}

我要回帖

更多关于 光通信芯片 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信