kingofchekiang
kingofchekiang
关注数: 38
粉丝数: 79
发帖数: 995
关注贴吧数: 65
旷野之息中水底的宝箱怎么拿? 在阿拉伊索海岸和克拉里海滩之间水底有宝箱好沉,使用磁力抓取器拿不出来那个宝箱。求怎么能拿过来?
快速直达专线10是否已经开通? 若线路确已开通,烦请各位提供其起始站、首末班时间、沿途站点与运营公司等具体信息。谢谢!
【英语】求助,高手过来看看这句 She has lived in our town for three years, but now she is living in Beijing. 这句是否正确?是不是时态冲突?
929路的千军台首班车在哪里驻车? 如上
关于休闲观光专线5问题 现在休闲观光专线5路还在吗?
正在拆解的比亚迪
YY新辟999路 新辟线路编码为999路,由四惠长途客运站至清河农场。 线路走向: 四惠长途客运站始发,经建国路、京通快速路(运河壹号西门口匝道上)、东五环、京津高速、津宁高速(海清公路口匝道下)、海清公路、津汉线、朗星路、同创大道、津汉线至清河农场。 清河农场始发,经津汉线、同创大道、朗星路、津汉线、海清公路、津宁高速(海清公路口匝道上)、京津高速、东五环、京通快速路(陈家林公交站东口匝道下)、建国路至四惠长途客运站。 沿途停靠:四惠长途客运站、京津合作示范区、清河农场3对停靠站。 票制票价:10公里以内票价2元,每增加5公里以内加价1元。 刷卡乘车:普通卡5折,学生卡2.5折,市外路段8折优惠。
【原创】跨越并进出北京市域的公交线路汇总表 欢迎观看以上汇总表,如有缺少线路或停靠站、错误停靠站的位置等问题,可以在下方回复。谢谢合作!
跨越并进出杭州市域的公交线路汇总表 欢迎观看以上汇总表,如有缺少线路或停靠站、错误停靠站的位置等问题,可以在下方回复。谢谢合作!
【英语】had是啥动词 使役动词:Mrs. Brown was much disappointed to see the washing machine she had had repaired went wrong again. 实义动词:Mrs. Brown was much disappointed to see the washing machine she had repaired went wrong again. 专业老师,两个句子的语法是否正确?句意通不通?
求问do so指代什么? This would be reasonable if it were not for the fact that scientists can easily arrange to cite themselves in their future publications, or get associates to do so for them in return for similar favors. 请问句中do so指代什么?
求助,谁能录像两条线路 求谁来录像开往地铁善各庄站的547路和地铁张郭庄站的565路全程,B站里面好像没有已调整的两条线路。
阿尔宙斯传说人物的祖先和后裔 有没有错误或遗漏
传统 阿尔宙斯人物祖先和后裔对比 帮忙有否错误或遗漏,谢谢!
阿尔宙斯游戏中主角绝对是如今的主角祖先
【英语】求regard……as……是什么状语? regard as引导什么状语?是不是结果状语?
【英语】求解答 An opportunity is something that,____,by no means you will get backAn opportunity is something that,____,by no means you will get back. A.if you lose B.when lose C.once lost D.after losing 书上的答案是C,请问为什么不选A?
我发现中门寺生态园场站腾退了,求941快车和965驻车在哪里?
【英语】offer后面出现了两个非谓语动词 German car maker Daimler,for example,has offered to automatically delete emails sent to employees while they're on holiday.动词不定式作宾语吗?怎么有delete 和sent两个动词呢?
求骷髅海盗的真名叫什么 图中那个骷髅海盗的真名叫什么?
NB-IoT测试(八)——RRC重建测试 RRC重建受不同覆盖模式的影响,所以RRC重建测试用例也可根据不同的覆盖等级区分。 普通覆盖模式下RRC重建测试包含两个同频或异频NB—IoT小区.验证UE在服务小区释放连接之后,重定向至目标小区的时延满足协议要求。增强覆盖模式下RRC重建测试包含两个同频或异频NB—IoT小区,验证UE在服务小区释放连接之后,重定向至目标小区的时延满足协议要求。RRC重建的时延是从NB—IoT服务小区发送RRC连接释放消息的TTI开始,到UE在目标小区发送NPRACH的时间。RRC重建的时延包括所有己知目标小区搜索的时间、读取目标小区相关系统消息的时间、随机接入过程的时间和100ms的补偿。由于小区搜索时间的不同,RRC重建的时话也受覆盖等级的影响,增强覆盖等级下的时延大于普通覆盖下的时延。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
LoRa广域网网络服务器算法——下行路径选择算法对比与仿真
【和你一起聊聊NB-IoT】SIM卡失效问题 针对我们公司的NB模组,在研发时我们偶尔会遇到SIM卡无法读取或者SIM卡失效的问题,这时就需要仔细分析查找原因,下面例举了几种常见的SIM卡失效问题并给出解决方案,帮助大家更高效的进行物联网应用开发,后续有SIM相关问题将持续需更新。以下的方案适用于利尔达NB866-G系列、NBXX-01系列和MB86系列模组。 1、读不到SIM卡 120模组:SIM卡规范中规定,DATA需要外部上拉,避免走线过长导致读不到卡号。 150模组:虽然内部增加了上拉电阻,但是如果走线很长,仍然需要增加上拉电阻。 2、插拔卡易损坏 由于插拔卡容易被静电损坏,建议增加TVS管保护。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
NB-IoT测试(七)——小区重选测试 在NB-IoT中,根据NRS SNR(信噪比)的不同,覆盖模式可分为普通覆盖模式(Normal Coverage)和增强覆盖模式(Enhanced Coverage),覆盖模式会对UE的测量性能有影响,从而导致小区重选的指标也不相同,所以小区重选的测试用例可根据不同的覆盖模式区分。普通覆盖模式下小区重选测试包含两个同频或异频NB-IoT小区,控制两个小区的功率,使UE满足重选条件,验证UE从服务小区重选到目标小区的时延是否满足要求。增强覆盖模式下小区重选测试包含两个同频或异频NB-IoT小区,控制两个小区的功率,使UE满足重选条件,验证UE从服务小区重选到目标小区的时延是否满足要求。 小区重选的时延是从服务小区和目标小区功率满足UE重选准则的时间开始,到UE在目标小区发送NPRACH的时间。 小区重选时延主要包括服务小区的测量和评估、目标小区识别、目标小区测量和目标小区评估等几个部分。其中,测量和评估的时延都受覆盖模式的影响,增强覆盖模式下的时延要大于普通覆盖模式下的时延。 (1)同频小区重选表1 同频小区重选测试 (2)异频小区重选表2 异频小区重选测试 (3)普通TAU表3 普通TAU测试 (4)周期性TAU表4 周期性TAU测试扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
【和你一起聊聊NB-IoT】OneNET FOTA基本流程和注意事项 1. 概述 OneNET 平台实现 FOTA 功能,主要是为了满足用户对模组进行远程升级,让集成了模组或含 MCU 的终端设备在现网运行过程中能够实现版本的更新迭代和管理功能。 2. 准备工作 (1)、 在FOTA升级之前,需要确保设备在OneNET平台上已经成功注册,且能正常发送数据。 (2)、 获取NB模组固件升级。(找NB模组厂商获取) (3)、 获取文件校验工具Hash(可在本帖下方下载) 3. FOTA固件升级流程 3.1. 在IoT平台创建升级任务 3.1.1 群组管理 (1)、单击左侧“FOTA升级”应用界面,再点击右上角的“添加FOTA群组”,如图3-2 (2)、创建好FOTA群组后,进入绑定界面如图3-6,勾选设备放入统一群组,若没有设备请在平台先注册设备IMEI号。图3‑1 FOTA升级入口图3‑2 创建FOTA群组按钮图3‑3 创建群组图3‑4 关联设备入口图3‑5 绑定设备界面图3‑6绑定设备界面(勾选设备后点击提交修改) 3.1.2 绑定设备 (1)、查看绑定信息,查看同一群组中有无版本号不一致,若不一致将会导致无法统一FOTA升级如图3-7。 (2)、在图3-7界面可对设备进行添加、删除等基本操作。图3‑7绑定后的设备信息 3.2. 上传差分包到OneNET平台3.2.1读取固件差分包MD5码 (1)、使用Hash工具读取差分包MD5码。如图3-8 (2)、模组支持差分包升级,暂不支持完整包的升级。图3‑8 读取差分包MD5码 3.2.2 上传差分包 (1)、单击FOTA升级,如图3-9。 (2)、选择“固件管理”下的“添加固件版本”,如图3-10。 (3)、填写版本号,点击确认。如图3-11(这里需创建模组当前版本和目标版本两个版本) (4)、创建好版本后,单击添加升级包,为目标版本上传差分包。如图3-13 (5)、点击确定按钮,提交固件包信息。图3‑9 FOTA升级图3‑10 新建固件版本图3‑11添加目标升级的版本号图3‑12 点击添加升级包图3‑13填写固件相关信息 3.2.3 创建固件升级任务 3.2.3.1 单个设备创建固件升级任务 (1)、OneNet平台无法对单个设备创建固件升级任务,只能对群组进行操作。 (2)、如果要对单个设备进行固件升级,请对该设备创建单独群组,然后再对群组进行FOTA升级。(创建步骤请见3.3.1) 3.2.3.2 创建批量固件升级 (1)、点击FOTA升级,进入FOTA升级界面,点击固件升级如图3-14。 (2)、点击升级任务管理,创建升级任务,如图3-15。 (3)、填写差分包升级信息,如图3-16。 (4)、选择合适的固件包,填写好相关信息,提示任务创建成功,就可看到升级的状态,如图3-18。图3‑14 FOTA升级入口图3‑15 创建升级任务图3‑16 选择升级用的差分包图3‑17 填写FOTA升级信息图3‑18 FOTA升级状态 3.3. 升级固件操作 3.3.1 激活升级任务 激活方式:操作NB模组主动向IoT平台上报一包任意数据。(注:由于平台原因,有时需上报多次数据才能激活FOTA升级,测试中最多上报数据次数不超过10次均能激活FOTA) 上报数据成功且NB模组回复“OK”后,模组会打印“+MIPLEVENT:0,40”信息,表示开始下载差分包。 3.3.2 下载固件阶段 (1)、升级任务激活后,当NB模组发出“+MIPLEVENT:0,40”信息时表明开始下载差分包;此时NB模组不能断电,且MCU不能向NB模组发送任何数据。 (2)、若NB模组会发出“+MIPLEVENT:0,42”信息,则表示下载完成。 3.3.3 升级固件阶段 下载升级包完成且校验成功后,NB模组发出 “+MIPLEVENT:0,43”表明NB模组开始更新固件;此时NB模组不能断电,且MCU不能向NB模组发送任何数据。 3.3.4 恢复网络阶段 (1)、若升级成功,NB模组将会自动复位,串口打印复位信息“REBOOT_CAUSE_SECURITY_FOTA_UPGRADE”。IoT平台显示下载完成,升级中。此时NB模组固件为升级后的新版本,MCU 可以正常处理业务。待NB模组联网、登陆平台成功后,平台侧会显示升级完成。 (2)、若升级失败,NB模组会自动复位,版本号未变,表示FOTA 升级任务结束。此时模组的固件保持升级前的老版本不变,MCU 可以正常处理业务。 3.3.5 升级过程截图 (1)、升级固件过程中,NB模组串口发出的数据信息如图3-19。 (2)、 升级完成后,通过AT指令读取模组固件版本信息并确认与升级的固件是否一致如图3-20。 (3)、升级完成后,在IoT平台FOTA升级页面详情中,会显示升级相关的信息如图3-21。图3‑19 NB模组串口发出的数据信息图3‑20升级固件NB模组串口数据信息图3‑21 NB模组固件升级后的版本信息图3‑22升级成功后的页面信息 4. 注意事项 4.1. 上传软件包到IoT平台阶段 (1)、 上传的差分包MD5码需正确,否则会校验失败。 (2)、 目前模组只支持差分包升级,请勿上传完整包。 (3)、平台侧若有升级未完成,手动强制取消的任务请务必删除此失败任务,否则可能会导致FOTA失败。 4.2. 固件升级阶段 (1)、 激活、下载固件、升级固件等过程,终端不可断电。 (2)、 激活、下载和升级固件过程中,不能向模组发“AT+NRB”重启指令。 (3)、 升级完成后一定要读取下固件的版本号进行确认升级是否OK。 (4)、 建议升级固件完成后一定要上报一包数据和IoT平台进行通信测试。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
【和你一起聊聊NB-IoT】快速简单了解NB-IoT是什么 NB-IoT的出现背景从传输距离上区分,物联网通信技术可以分为两类,一类是短距离通信技术,代表技术有Zigbee,Wi-Fi,Buletooth,Z-wave等,典型的应用为智能家居;另一类是广域网通信技术,业界一般定义为LPWAN(低功耗广域网),典型的应用为智能抄表。LPWAN技术又可分为两类:一类是工作在非授权频段的技术,如Lora,Sigfox等,这类技术大多是非标、自定义实现;一类是工作在授权频段的技术,如GSM、CDMA、WCDMA等较为成熟的2G/3G蜂窝通信技术,以及目前逐渐部署应用、支持不同category终端类型的LTE及其演进技术,这类技术基本都在3GPP或3GPP2等国际标准组织进行了标准定义。 NB-IoT既是2015年9月在3GPP标准组织中立项提出的一种新的窄带宽蜂窝通信LPWAN技术。 NB-IoT属于LPWAN家族 最开始出现的是LTE-M,后来进化成CIoT,NB-LTE跟NB-CIoT进一步融合形成NB-IoT,即NB-CIoT+NB-LTE=NB-IoT NB-IoT是由华为、高通和Nevl联合推出 NB-LTE是由爱立信、诺基亚等厂家提出 为解决什么应用需求而生 为迎合未来IoT万物互联的发展趋势,具更低成本、低功耗、广覆盖、低速率特点的LPWAN技术将扮演重要角色。长期以来,3GPP制式运营商的物联网业务主要依靠成本低廉的GPRS模块,然而由于Lora、Sigfox等新技术的出现,GPRS模块在成本、功耗和覆盖方面的传统优势受到威胁,于是在2014年3月的GERAN #62会议上3GPP提出成立新的研究项目“FS_IoT_LC”,研究演进GERAN系统和新接入系统的可行性,以支持更低复杂度、更低成本、更低功耗、更强覆盖等增强特性。 NB-IoT正是源于面对非3GPP技术挑战,开展GSM技术的进一步演进和全新接入的研究。 当前,全球电信运营企业普遍面临市场饱和、增长乏力等问题,移动M2M巨大的市场潜力及低成本优势,吸引运营商积极投入。无需移动性,小数据量,对时延不敏感。 NB-IoT的优势 •强链接:在同一基站的情况下,NB-IoT可以比现有无线技术提供50-100倍的接入数。一个扇区能够支持10万个连接,支持低延时敏感度、超低的设备成本、低设备功耗和优化的网络架构。举例来说,受限于带宽,运营商给家庭中每个路由器仅开放8-16个接入口,而一个家庭中往往有多部手机、笔记本、平板电脑,未来要想实现全屋智能、上百种传感设备需要联网就成了一个棘手的难题。而NB-IoT足以轻松满足未来智慧家庭中大量设备联网需求。 •高覆盖:NB-IoT室内覆盖能力强,比LTE提升20dB增益,相当于提升了100倍覆盖区域能力。不仅可以满足农村这样的广覆盖需求,对于厂区、地下车库、井盖这类对深度覆盖有要求的应用同样适用。以井盖监测为例,过去GPRS的方式需要伸出一根天线,车辆来往极易损坏,而NB-IoT只要部署得当,就可以很好的解决这一难题。 •低功耗:低功耗特性是物联网应用一项重要指标,特别对于一些不能经常更换电池的设备和场合,如安置于高山荒野偏远地区中的各类传感监测设备,它们不可能像智能手机一天一充电,长达几年的电池使用寿命是最本质的需求。NB-IoT聚焦小数据量、小速率应用,因此NB-IoT设备功耗可以做到非常小,设备续航时间可以从过去的几个月大幅提升到几年。 •低成本:与LoRa相比,NB-IoT无需重新建网,射频和天线基本上都是复用的。以中国移动为例,900MHZ里面有一个比较宽的频带,只需要清出来一部分2G的频段,就可以直接进行LTE和NB-IoT的同时部署。低速率、低功耗、低带宽同样给NB-IoT芯片以及模块带来低成本优势。模块预期价格不超过5美元。网络组成 全球大多数运营商使用900MHz频段来部署NB-IoT,有些运营商部署在800MHz频段。 中国联通的NB-IoT部署在900MHz、1800MHz频段。 中国移动的NB-IoT部署在900MHz频段。 中国电信的NB-IoT部署在800MHz频段,频率只有5MHz。 常见部署方式 NB-IoT有三种运营模式,一种是独立的运营商的网络外面重做;第二种是在LTE的保护带上,实际上它主要的原理是上行是采用OFDMA,前后保留10khz的保护带,它有两种子载波间隔,一种是3.75khz的,另一种是间隔15khz的;第三种是带内模式:可利用LTE载波中间的任何资源块。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
AliOS技术之环形缓冲池 1、前言 ring buffer是一种固定尺寸、头尾相连的缓冲池的数据结构,适合缓存数据流。环形缓冲池多用于两个任务之间传递数据,是标准的先入先出模型。 一般来说,若多个任务之间共享数据需要使用互斥机制来进行同步,以保证共享数据不会发生不可预测的修改与读取,然而互斥机制的使用也会带来额外的系统开销。环形缓冲池的引入就是为了有效解决这个问题,以提高系统资源利用率。 2、初始化与重置 (1)ring buffer初始化 函数原型:kstart_t krhino_ringbuf_init(k_ringbuf_t *p_ringbuf,void *buf, size_t len,size_t type, size_t block_size) ring buffer初始化需配置ringbuf的长度、类型、存储元素长度及在内存中实际的存储位置。其中,管理结构体k_ringbuf_t的主要数据成员包括: buf:ring buffer在内存中的实际开始位置; end:ring buffer在内存中的实际结束位置; head:存储在缓冲池中的有效数据的开始位置,即读指针; tail:存储在缓冲池中的有效数据结尾位置,即写指针; freesize:标示缓冲池当前剩余可用空间大小; type:标示缓冲池的内型,“固定长度(RINGBUF_TYPE_FIX)或是可变长度(RINGBUF_TYPE_DYN)”。 block_size:标示存储在缓冲池中的单个数据块长度,只针对RINGBUF_TYPE_FIX有效。 (2)ring buffer重置 函数原型:kstart_t krhino_ring.buf_reset(k_ringbuf_t *p_ringbuf) ring buffer重置会清除缓冲池中的数据块,并重置ring buffer的读/写指针、剩余可用空间大小。 3、环形缓冲池的写入与读取 (1)ring buffer的写入 函数原型:kstart_t krhino_ringbuf_push(k_ringbuf_t *p_ringbuf, void *data,size_t len) ring buffer写入的步骤主要包括: ①判断缓冲池是否已满,若已满,则返回RHINO_RINGBUF_FULL错误。 ②判断缓冲池的剩余空间能否写入数据块,若不能,则返回RHINO_RINGBUF_FULL错误。 ③重新校准缓冲池的写指针及剩余空间大小。 ④压入数据块。 (2)ring buffer的读取 函数原型:kstat_t krhino_ringbuf_pop(k_ringbuf_t *p_ringbuf, void *pdata, size_t *plen) ring buffer读取的步骤包括: ①判断缓冲池是否为空,若为空,则返回RHINO_RINGBUF_EMPTY错误; ②读取数据块; ③校准缓冲池读指针及剩余空间大小。 4、环形缓冲池的容量判断 (1)判断ring buffer是否为空 函数原型:uint8_t krhino_ringbuf_is_empty(k_ringbuf_t *p_ringbuf) 若缓冲池的剩余空间大小与预设的环形缓冲池长度一致,会判断此时缓冲池为空。 (2)判断ring buffer是否已满 函数原型:uint8_t krhino_ringbuf_is_full(k_ringbuf_t *p_ringbuf) 对于RINGBUF_TYPE_FIX类型,若环形缓冲池的剩余空间小于预设的固定数据块长度,则判定缓存池已满。对于RINGBUF_TYPE_DYN类型,若环形缓存区的剩余空间小于8字节,则判定缓存池已满。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
lorawan模块——DeviceTime commands 实时时间获取 MAC指令简介 1.定义 DeviceTime commands,是lorawan V1.1协议新增的1条MAC指令,主要用于模块向服务器请求将自身RTC时间更新成实时时间。 2.模块AT指令定义 AT+TIMESYNC //此为模块定义的1条AT指令,MCU发送此条指令给模块,模块就会发送DeviceTimeReq指令,服务器也会紧跟着下发DeviceTimeAns指令,模块收到后,会根据服务器下发的实时时间,来更新自己的RTC时间。 3.AT指令使用方法 模块入网后在指令模式下执行AT+TIMESYNC指令,最大6s后查询rtc即可。 即: AT+TIMESYNC AT+SAVE AT+RESET 类似于上面这样,模块发指令给服务器,服务器收到后,下发实时时间给模块,模块再更新自己的RTC时间。 扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科 4. 实时时间定义 服务器下发的是,以GPS时代开始的xxx秒,再换算成当前的时间。 GPS时间是从1980年开始的,不是unix时间戳那个70年开始的。 注:GPS纪元(即1980年1月6日,星期日,午夜)被用作起点。
【蓝牙mesh Q&A】利尔达telink平台 OEM项目固件版本号烧录函数 char Lsd_ver[32]=LSD_VERSION; char Lsd_ver_check[32]=LSD_VERSION; void lsd_check_ver() { flash_read_page(FLASH_ADR_LSD_VER,sizeof(Lsd_ver),(u8 *)Lsd_ver_check); while(memcmp(Lsd_ver,Lsd_ver_check,sizeof(Lsd_ver))!=0) { flash_erase_sector(FLASH_ADR_LSD_VER); flash_write_page(FLASH_ADR_LSD_VER,sizeof(Lsd_ver),(u8 *)Lsd_ver); flash_read_page(FLASH_ADR_LSD_VER,sizeof(Lsd_ver),(u8 *)Lsd_ver_check); } }扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
蓝牙1/4波长天线讨论 我们在挑选或调试蓝牙模块天线的时候,一般总是将天线的尺寸选择在1/4波长附近,原因是天线在1/4波长处会谐振,那么此时馈如天线的功率是否是最大呢?答案是否。 首先我们要理解为什么1/4波长的天线会谐振?因为此时天线的输入阻抗表现为纯电阻=73.2Ω,电抗为0,这个可以类比串联谐振电路的情况;对于50Ω的传输线体系,我们在调试的时候要保证天线的S11较深,这个操作就等效于把73.2Ω在史密斯圆图上拉到50Ω,此时天线前级电路馈入天线的功率最大,没有发射波;理论上来讲,对于输出阻抗50Ω的前级放大电路,如果将其等效为一个恒压源,他的资用功率是固定的,也就是无论后级天线阻抗在哪里,只要我将天线阻抗匹配到50Ω,此时馈入天线的功率就是最大的,匹配网络在电学上的实际作用是通过匹配电感电容的分压,在天线辐射电阻上得到特定的分压,使得天线辐射电阻上的功率等于前级电路的资用功率。 那么为什么一般会使用1/4波长?1/8波长不行么?3/8波长不行么?全波振子不行么? 如附件图片所示是天线的辐射电阻和电抗随天线电长度的变化,我们可以看到如果使用1/8波长或3/8波长天线,天线的阻抗在史密斯图上的位置太偏了,接近开路点,我们做匹配的时候很难将其拉到50Ω;但是全波振子的电抗也为0 ,电阻为200Ω,为啥也不行呢? 长度因素是一方面,另一方面可以从曲线在电长度分别为0.25和0.5处的斜率看出,1/4波长天线的阻抗随频率变化较缓,即可以在较宽频带内与50Ω匹配,但是全波振子的阻抗随频率变化特别陡峭,即天线的频带特别窄。天线辐射电抗随电长度的变化扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
Alios之互斥机制(mutex)
SX1208通信模式区别介绍:packet mode & continue mode SX1208的通信模式有两种,一种是packet mode,另一种是continue mode,其中我们较为常用的模式为packet mode。从字面上去理解,packet为包模式,数据以一包一包的形式传输通信,continue为连续模式,数据是连续不断的进行传输。 Packetmode通信方式是将通信的数据存放进FIFO中,切换到发射模式,发射模组便自动发射前导码、同步字和数据(和CRC校验),接收模组在进入接收模式后,便自动检测前导码和同步字,当前导码和同步字验证正确后(可配置一定的容错率)便会将后续的数据存放进FIFO。 而continue mode与packet mode在数据的处理上不同,continue mode 不会经过FIFO这个环节,发射端,模组会直接读取data引脚上的数据,然后按照时钟节拍将数据调制后发射出去,与packet不同的是,continue是实时一位一位数据发射,而packet这是整包数据先存放再一位一位发射;接收端continue mode下,数据不会存放进FIFO中,但接收到的数据会按照时钟节拍表现在data引脚上,packet则是完整的接受完后,用户可从FIFO中读取,continue则需要跟着时钟节拍一位一位去data引脚读取。 packet mode通信流程:发射模式接收模式 packet mode 只需要在切换至发送模式之前将数据填入FIFO,然后切换至发送模式后便会自动发送,接受也同样的会自动接收,当接受完成后会产生相应的中断后,便可从FIFO中读取数据。 continue mode 通信流程:发射模式接收模式 DCLK为continue mode的时钟节拍,每一次上升沿,模组便会将data引脚上的数据(0或1)调制发射出去,因此需要在时钟的下降沿中断产生时,变更data引脚的数据,由于该模式是一位一位实时发射,所以用户需要将数据按位一位一位的在下降沿中断输出到data引脚上去直至全部数据都输出完毕。需要注意的是,该模式没有像packet一样有发射完成的标准,所以数据完成后,若不退出发射模式,模组会继续按照节拍将data上的数据发射出去。同样的道理,进入接收模式后,模组会自动解调信号并映射到data引脚上,在DCLK的时钟下降沿时会更新数据,因此用户需要再时钟上升沿中断产生时去读取data引脚的数据。整个通信的数据内容皆由用户自行决定,因此发射端不会像packet一样会自动发送前导码和同步字等信息,用户可自定义同步条件,若不采用前导码和同步字的配置,在接收端需要时刻去读取data引脚的数据并对比是否正确。但若发射端发射的数据前将前导码信息和同步字信息(要与接收端寄存器配置一直)先发射再发射数据,接收端能够产生前导码中断和接收中断,之后再进行data引脚的数据采样,这样便可以避免高频率的进中断读取data引脚进行数据同步。 从二者的操作复杂度看,packet模式明显要简单的多,因此实际使用中,更推荐使用packet模式,continue模式有更好的自定义通信状态的选择,但是需要严格的同步才能保证数据的准确性。用户可以根据需要选择相应的模式。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
NB-IoT测试(六)——安全模式 (1)鉴权过程表1鉴权过程测试 (2)NAS层安全模式控制表2 NAS层安全模式控制测试 (3)AS层完整性保护表3 AS层完整性保护测试 (4)AS层加密/解密表4 AS层加密/解密测试 (5)UE识别过程表5 UE识别过程测试扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
Lierda MB86型模组相关资料 MB86系列模块与NB86-G系列模块均是是基于HISILICON Hi2115的Boudica芯片开发的,差别在于模块的机械结构,较NB86系列尺寸大一点,兼容市场上另一款主流模块。该模块为全球领先的NB-IoT无线通信模块,符合3GPP标准, Hi2115芯片支持Band01, Band02, Band03,Band05、 Band08、 Band12, Band13, Band14, Band17, Band18, Band19, Band20、 Band25,Band26, Band28, Band66频段,具有体积小、功耗低、传输距离远、抗干扰能力强等特点。使用该模块,可以方便客户快速、灵活的进行产品设计。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
tcp和udp创建流程 一、UDP服务器创建 (1)socket()建立socket套接字 (2)在sockaddr_in中设置IP地址和端口号等信息 (3)bind()绑定IP和端口 (4)recvfrom()接收数据、sendto()发送数据(注意recvfrom的阻塞和非阻塞) 二、UDP客户端创建 (1)socket创建socket套接字 (2)在sockaddr_in中设置IP地址和端口号等信息(IP地址设置为需要连接的主机IP) (3)recvfrom()接收数据、sendto()发送数据 三、TCP服务器创建 (1)socket()创建socket套接字 (2)在sockaddr_in中设置IP地址和端口号等信息 (3)bind()绑定IP和端口 (5)listen()启动服务器 监听 (7)accept()接受来自客户端的响应,返回一个客户端的socket (8)recv()、send()向客户端的socket接收和发送数据 四、TCP客户端创建 (1)socket()创建socket套接字 (2)在sockaddr_in中设置IP地址和端口号等信息(IP地址设置为需要连接的主机IP) (3)connect()连接服务器 (4)send()、recv发送和接收数据扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
WiFi6和5G的区别 一、协议上的区别 Wi-Fi 6指的是802.11ax技术; Wi-Fi 5指的是802.11ac技术; 二、传输速度 对于80Ghz信道上的单个空间流,WiFi 5的理论速度是866MB/s,WiFi 6的理论速度是1201MB/s。 三、WiFi 6可以解决哪些问题 传统上,WiFi性能在负载下无法预测。802.11ax是更有确定性的,包括在延迟和吞吐方面。802.11ax背后的主要焦点不是速度。该标准解决了“大量设备”连接到网络出现的网络拥塞和容量问题。相比WiFi 5,WiFi 6网络带宽提升4倍,并发用户数提升4倍,网络时延从平均30ms降低至20ms。无线接入点(AP)能同时处理多达12个的WiFi流。 四、WiFi 6怎么解决效率的问题? 以前的WiFi协议,这个无线接入点(AP)一次只能与一台设备“会话”。但是,WiFi 6让无线接入点(AP)具备从多台设备同时发送和接收数据的能力。 传统上,在802.11中,存在DCF(分布式协调功能)的概念。这意味着,如果你是准备传输数据的无线电,你需要首先看看是否有其他人在使用这个频道。这意味着,即使你是WiFi 5,你仍然需要“排队轮着你”并争取到与其他较旧的802.11a/b/g设备进行频道访问。 换句话说,在任何给定的时间点——对于一个通道,在一个信号强度范围内只有一个帧可以在该通道上。因此,不同的设备必须互相寻找,以便在它们可以“会话”之前看看其他人是否在“会话”。 另一个有趣的特征是“TWT”的概念。TWT,即目标唤醒时间,允许AP规划与设备的通信,协商什么时候和多久会唤醒发送/接受数据,可将终端分组到不同的TWT周期,减少了保持天线通电以传输和搜索信号所需的时间,意味着减少电池消耗并改善电池续航表现,同时也减少唤醒后同时竞争无线资源的设备数量。 基于TWT技术,未来连入WiFi中的所有智能设备,每台设备可以建立“唤醒协议”,终端设备仅在收到自己的“唤醒”信息后才进入工作状态,而其余时间均处于休眠状态。这让一些需要高宽带通信的物联网设备成为可能,比如智能办公设备,TWT可以节省7倍的电池功耗。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
物联网天线设计实战指南 扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
射频PCB设计规则 射频电路设计在PCB LAYOUT设计中属于很重要的部分,电路布局、规则设计的好坏将会直接影响模块的通信质量。 本文档旨在协助客户在无线模块设计过程中涉及到的射频PCB LAYOUT设计而提出,客户在设计电路时可以参照以下各项设计规则对照检查PCB设计的合理性,本技术文档适用于各类无线模块。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
Lierda-Pico系列LoRa广域网网关 服务器IP配置教程 扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
NB-IoT测试(五)——IP数据和NonIP数据 扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
WiFi信令测试在研发过程中的作用 1、关于信令测试的故事 2016年的某天,某著名网络产品公司技术负责人致电寻求技术支持:我们的无线路由器遇到了一个困惑:我们某款路由器应用于实际WiFi网络中时,WiFi终端接入非常困难。但是我们使用测试工具检测此路由器,它的所有物理射频指标都非常优异。不知道是为什么? 我来到了测试现场看到:WiFi路由器受控于芯片公司的测试工具,其WiFi发射机指标在非信令测试仪上显示:无论功率、EVM还是频谱等指标都是正常的。这到底是什么原因导致WiFi终端接入困难呢? 我们想到了使用信令综测仪模拟现实网络以验证情况。结果有了新的发现:在信令模式下,WiFi路由器的发射机指标显示不再正常:符号时钟严重失锁(Symbol Clock Error)。我们迅速更换了基带电路的锁相环,问题得以顺利解决。 这,又是为什么呢? 2、信令测试原理及其独特作用 2.1 信令测试与非信令测试的机理 2.1.1信令测试(Signaling measurement) WiFi的信令测试是指模拟现实网络的呼叫连接,通过AP与Station相互握手消息交互完成信号连接,仪器扮演Station或AP角色来完成与被测件的无线连接,并测试被测件的无线性能指标的测试。 2.1.2非信令测试(NoSignaling measurement) 通过进入WiFi芯片的工厂测试模式,直接控制射频模块发送指定功率、指定频率或控制芯片接收指定数据包,仪表直接测量被测件的物理层射频指标,没有MAC层以上的协议交互。 2.2 WiFi信令连接过程中的同步机理 我们知道,无线信号传输有两种方式: 一种是广播方式,信号持续发射,因此同步可以通过长时间的跟踪比对来实现,此方式比较容易实现同步,如移动通信的LTE、WCDMA等通讯技术; 另外一种是包交换方式,信号为单帧发射,需要在短时间秒内准确地捕捉到数据包的边界,从而完成准确的同步,如WiFi的通讯技术。 因此,在WiFi连接中,对同步的要求是较高的。 总的来说,WiFi的同步过程包括三大部分:时间估计、频率同步、信道估计。我们逐一分析如下: 2.2.1 时间估计:图1、时间估计 1) 包同步 首先我们介绍包同步。包同步是时间同步的第一步,完成对传输包边沿的大致估计。 a) 当有信号输入时,将会有一个迅速上升的上升沿,由此得到信号边沿,这只是时间边界的初步估计。 b) 第二步,为进一步提高准确度:采用双滑动窗口,按照前后两个窗口内的积分功率比值触发。这样上升沿无需纠结门限高低,它都会输出一个较实时陡峭触发,由此可轻易地大致捕捉到传输数据包的边沿。这就是双滑动窗捕捉。 c) 在第三步采用试探针包捕捉来完成精确的时间估计。图2、Wifi 的试探针结构 d) 包同步的实现是通过对信号的AD转换、累计、时延、比对和运算完成的,由基带部分判别完成。非信令测试只会对产品的射频部分的无线物理指标验证,不涉及基带。因此,信令测试可以对基带部分实现的时间估计性能进行量化测试。因此,对于研发、测试部门来说,信令测试是有较好的验证作用的。 2) 采样时钟锁定 我们知道,当WiFi的OFDM信号采样时钟出现偏差的时候,会出现两种后果: a) 采样到的符号(symbol)在规定时间点出现细微抖动,即信号的相位将出现旋转,达到一定程度时,将无法恢复信号; b) 由于采样时钟的偏差,导致符号间干扰(ISI),进而导致信号的SNR变差. 因此,需要采用锁相环+压控晶振或固定频点晶振来完成对频率误差的纠正:图3、采用锁相环+压控晶振或固定频点晶振来完成对频率误差的纠正 c) 当AP或Station的晶振出现问题的时候,将会出现采样频率失锁问题。我们看到,这一部分也是在基带部分来完成的。 2.2.2 频率同步 在WiFi同步过程中,与时间同步一样,频率同步也同样地重要。 a) WiFi技术中,特别是采用OFDM技术的802.11n, AC等制式对频率错误非常敏感。 频率错误会直接导致信号的SNR恶化。 b) 引起频率误差的原因主要为来自:相邻子载波的干扰(ICI)及各子载波的功率回退。 c) OFDM的子载波实现是通过基带的FFT+串并转换实现的,因此,基带运算的准确与否以及基带电路是否出现异常,都会直接影响信号的FFT变换的准确性和精度,进而影响频率误差大小,进而影响信号的SNR。 2.2.3 信道估计 a) 通过测试信号试探针里的C1、C2部分,可完成对传输信道模型的估计,得到准确的传输模型,完成对接收信号解调。 b) 在信道估计的过程中,试探针的C1、C2解调(相乘),也是在基带完成的。如果此基带部分出现问题,将导致信道估计失常、无法解析数据。 3、回顾 在现实网络中,当WiFi的OFDM信号采样时钟出现偏差的时候,会出现两种后果: 1) 采样到的符号(symbol)在规定时间点出现细微抖动,即信号的相位将出现旋转,达到一定程度时,将无法恢复信号。 2) 由于采样时钟的偏差,导致符号间干扰(ISI),进而导致信号的SNR变差。 但是,非信令测试却无法发现符号时钟失锁(Symbol Clock Error)。因为当非信令测试的时候,工具根本没有启用管理采样时钟同步、符号同步的基带部分,只是通过射频触发方式完成同步测量。因此无法验证基带部分是否工作正常,结果导致上例的“在现实网络服务中WiFi终端接入困难”问题无法在出厂前被发现。但如果采用信令综测仪就能发现这一问题。 实际上问题是由于基带电路的锁相环出现问题,导致采样时钟偏差,进而导致采样符号相位反转、因此符号抖动,严重者导致解析错误。同时,也导致符号间串扰严重,最后导致路由器错误、甚至无法解析接入信号,接入申请无法识别,结果当然就是——接入困难甚至无法接入。 当我们更换了锁相环后,问题迎刃而解。此处,信令测试体现出了它独特的作用。 4、结论 WiFi的同步分为三大部分:时间同步、频率同步、信道估计。从“信号接收电平强度检测”到“确定信号传输模型”的同步过程中,任何一步的缺失,都会可能导致较差的EVM,或者恶化的SNR,或者直接导致无法解调信号。因此,在产品研发设计、测试阶段,如果使用信令测试方式,就能确认产品的基带部分、射频部分是否正常工作,无线性能是否达到规范要求。 信令测试可能会发现某些非信令测试无法发现的被测件基带部分存在的问题,为我们解决问题提供有益的原始数据。建议使用R&S公司独有的CMW270 WiFi信令测试方案,其方案除了可以验证的WiFiAP或Station产品(包括基带、射频部分)是否符合Wlan无线规范测试要求外,甚至还可以测试LTE与WiFi共存情况下的相互影响关系。图4、R&S公司CMW270 WiFi信令测试方案扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
wifi速率协商交互过程 速率协商的基础机制为报文确认机制、报文重传机制、报文调速机制。三大机制可以使无线路由器和终端在空口协商得到一个符合当前环境的报文发送、接收速率。 报文确认机制:该机制用于保证空口数据传输的可靠性。在报文传输过程中,发送方发送的每一个IEEE802.11报文,接收方在收到后均要进行ACK回复确认。当发送方接收到接收方收到的ACK确认后,才认定报文已经发送成功,从而发送下一帧数据;否则发送方重新进行报文发送; 报文重传机制:报文在发送失败后,在同样的速率下重新进行发送;此时发送方和接收方依旧使用报文确认机制进行可靠性确认。 报文调速机制:在当前环境下使用当前速率在报文确认机制、报文重传机制后依旧无法重传成功,在发送方进行降速操作,降速后对报文进行重传。降速时按照54Mbps、48Mbps、36Mbps、24Mbps、18Mbps、12Mbps、11Mbps、5.5Mbps、1Mbps等速率进行降速,直到协商到一个合适的速率,在该速率下,报文在此能够正常传输。 当环境恢复到能够支撑报文使用高速率传输时,发送方会通过增大传输速率的试探方法进行速率调高;当调高之后,报文能够正常发送后,发送方保持高速率传输。 需要注意的是,报文传输速率对无线路由器和终端来讲,协商过程是各自独立的,是由报文的发送方决定。如无线路由器发送给终端用户可能使用54Mbps报文,而终端用户发送给无线路由器的报文则可能使用11Mbps。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
LoRa开发“万用表”——LoRa广域网网络工具S1介绍
利尔达lorawan模块的上行数据类型—UNconfirm帧介绍 1. UNconfirm帧的定义 A confirmed-data message MUST be acknowledged by the receiver, whereas an unconfirmed-data message does not require an acknowledgment. -----------------------------上述是lorawanV1.1协议中对UNconfirm帧的定义,即非确认帧不需要1个ACK回复。 2. UNconfirm帧适合的应用场景 答:UNconfirm帧适用于,以终端设备主动上报数据为主,服务器很少或者几乎不会下行数据的应用场景,类似于水表、井盖等应用。 3. 客户采用UNconfirm帧的方式,但是又担心模组会掉线,该怎么办。 答:终端设备可以定时发心跳包给服务器,来确认是否在线,心跳包可以用confirm帧来实现,具体如下: 设备正常发数据,用UNconfirm帧;定时心跳时间到,模块切换至指令模式下,配置成confirm帧,发几包(带重发),如果其中有1包模块收到了下行ACK,那么重新进入指令模式,切回UNconfirm帧继续发应用数据;如果这几次都没有收到下行ACK,那么进入指令模式下,配置AT+JOIN=1 ,AT+RESET模块进行强制入网操作,待本次入网成功后,再进行正常的数据收发操作。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
连接核心网但无法连接IoT平台问题分析 产品可以连接核心网但是无法连接IoT平台问题分析 可以通过以下指令查看是连接到核心网 核心网附着成功标志(核心网可以注册即说明SIM卡服务正常) A、直接查询是否注册成功 AT+CGATT? 返回 1 ,即代表成功 B、IP地址查询 返回正确的 IP地址即表示成功 原因分析 (1)设备是否在平台注册 查询该设备是否在平台注册,如果没有注册,则需要先进行注册才可以接入平台。 (2)查询NCDP配置是否正确 查询模组NCDP地址和端口是否配置,配置地址是否是所需接入平台的IP地址。 例如:AT+NCDP指令查询设置电信IoT平台服务器地址和端口 AT+NCDP? 示例返回NCDP:180.101.147.115,5683则表配置成功。 若配置未成功则需要发送AT指令AT+NCDP=180.101.147.115,5683 配置IP地址和端口,复位生效。 (3)查询LWM2M协议是否打开 发送AT+MLWM2MENABLE? 若返回:AT+MLWM2MENABLE=1 则表示该协议已经打开。 若返回:+MLWM2MENABLE:0 则表示该协议未打开,需发送AT+MLWM2MENABLE=1 主动打开该协议,复位生效。扫码关注我们 物联网开发者社区 一个移动的物联网贴心百科
【和你一起聊聊NB-IoT】OneNET添加Object指令AT+MIPLADDOBJ说明 很多客户在使用NB86-G模组时遇到过AT+MIPLADDOBJ指令参数配置的问题,今天我们就来说说AT+MIPLADDOBJ指令的使用方法。其实在B500SP1之后的OneNET指令集里,我们已经在AT+MIPLADDOBJ指令后添加上了相应的说明,为了让大家更清楚的知晓该指令的配置情况。今天特地拎出来跟大家介绍一下AT+MIPLADDOBJ:<ref>:基础通信套件的一个实例标识,类型为一个无符号整数 <objectid>:对象ID <instancecount>:实例个数 <instancebitmap>:实例位图,字符串格式,每一个字符表示为一个实例,其中1表示可用,0表示不可用。例如当前添加的object有5个实例,其中1,3可用,则实例位图为00101。 <attributecount>:属性个数(属性个数填写时,应大于0,否则会资源信息上报失败) <actioncount>:操作个数(属性个数加上操作个数应大于等于总的资源个数) 大家需要注意的是最后第二个参数<attributecount>,是必须大于0的,否则会资源信息上报失败 例如:AT+MIPLADDOBJ=0,3200,1,"1",1,4 另外,最后一个参数<actioncount>操作个数,在配置该参数时,以下等式一定要成立,才能返回OK。 属性个数 + 操作个数 > 总的资源个数
Unicore开发评估套包
【蓝牙mesh Q&A 第十弹】如何通过天猫精灵APP升级设备? 通过天猫精灵APP升级设备的功能已经开放,您可通过如下步骤进行设备升级。 step1:打开天猫精灵APP,进入“我家”页面 step2:点击要被升级的设备,进入控制页面。 step3:点击“设备升级”,进入设备升级界面。找到要升级的设备
【蓝牙meshQ&A】第四弹——如何烧录K5x,K8x系列模组固件? 在日常调试过程中,需要使用telink BDT工具更新模组端程序。那么,如何使用telink BDT工具烧录模组程序呢?今天就让一步步带您操作。 1:确定烧录工具种类: 目前K5x\K8x系列模组的烧录工具主要有两种,一种是8266 EVK(如附图1)以及telink官方烧录工具(如附图2)。其中,8266 EVK需要更新固件后,才能被使用于K5x系列模组的烧录,请务必确认。 2:接线,烧录器的VCC、GND分别于模组的VCC、GND相连,烧录器的SWM接模组的SWS,模组引脚请参见模组规格书。 3:打开BDT工具,其图标如附图3。 4:在File->Open中选择需要烧录的固件。 5:在左上角的下拉框中选择需要对应的模组型号,其中K5X系列可选择8258,K8X系列模组可选择8269。 6:点击Activate,随后点击SWS。LOG窗口会现Activate OK! 、 TC32 EVK: Swire ok! 提示,如附图4所示,如激活失败,可以反复多尝试几次,或直接跳至下一步。 7:点击Erase,擦出模组内部的Flash,如附图5所示。 8:点击Download下载模组固件,如附图6所示。 9:最后点击界面右上角的Reset,LOG界面显示”reset mcu “,复位CPU,完成模组的固件烧录。附图1 8266 EVK附图2 telink官方烧录工具附图3 BDT图标附图4附图5 擦除Flash附图6
LoRa知识学习(一) LoRa是“Long Range”的缩写,是一种专用于远距离、低功耗的线性调频扩频调制无线通讯技术。最早由美国Semtech公司采用和推广。 这一方案为用户提供一种简单的能实现远距离、低功耗无线通信手段。目前,LoRa 主要在ISM频段运行,主要包括433、868、915 MHz等。 LoRa是物理层或无线调制用于建立长距离通信链路。许多传统的无线系统使用频移键控(FSK)调制作为物理层,因为它是一种实现低功耗的非常有效的调 制。LoRa®是基于线性调频扩频调制,它保持了像FSK调制相同的低功耗特性,但明显地增加了通信距离。 LoRa的特点:1、低功耗 2、远距离 3、低速率 LoRa之所以通信距离远的原因在于扩频技术,扩频技术能有效的抵抗各种噪声和其他信号的干扰,获得更好的信噪比增益。 LoRa的三个基本参数:1、扩频因子(SF) 2、信号带宽(BW) 3、编码率(CR) 1、扩频因子(SF) LoRa采用多个信息码片来代表有效负载信息的每个位,扩频信息的发送速度称为符号速率(Rs),而码片速率与标称的Rs比值即为扩频因子(SF,SpreadingFactor),表示了每个信息位发送的符号数量。 扩频时每一位数据都要与扩频因子相乘,当扩频因子是8时,每一位数据经过扩频后含有8位数据来表示这一位数据,因此需要传输的数据量会增大,但这样可以降低误码率,扩频因子越大,传输速率越低,但抗干扰能力也越强。 2、信号带宽(BW) 信号带宽是指信号能通过的上线频率和下限频率的范围,可以理解为一条通道,只允许信号带宽内的频率信号可以通过。LoRa中,增加BW可以可以提高有效数据速率,但是灵敏度会受到相应的影响。 3、编码率(CR) 编码率是指数据流中有用信号占的比例,若编码率为4/5,对于4位有效数据,实际编码会参数5位,多出的一位为冗余值,其作用是为了增加抗干扰能力。而LoRa采用循环纠错码来进行检测和纠错。
NB-IoT测试(四)——UE寻呼过程和资源调度方式 一、寻呼过程 二、资源调度方式 (1)锚载波 (2)非锚载波
【蓝牙mesh】IV Index IV Index 大小为 32bit,初始值为0x00000000,在IV update过程中递增,每个Network PDU中包含了IV Inedx的最低位。 关于IV Index 最重要的便是IV update 了,IV Index 通过 Secure Network beacons 进行共享并指示是否需要更新: 其中 flag 包含了IV Update Flag 具体 IV Update Flag 与使用哪个IV Index的关系:
USB 3.2 Gen 1对Wi-Fi的干扰 当你兴奋的买来了一台最新的电脑,然后插上U盘接着连接无线网后,你会惊讶的发现怎么以前旧电脑都能好好使用的无线网络,在新电脑上却完全无法使用,难道是被奸商坑了?哦,在你打算去找奸商理论之前,请先看下你是不是在用USB 3.2 Gen 1,以及你的WiFi使用的是2.4GHz频段,如果你刚好满足这两个要求,那么恭喜你,你没有被奸商坑,因为USB 3.2 Gen 1和2.4GHz 的Wi-Fi就是不兼容的。 USB3.0的高速由来 USB接口除了电源的正负极两个管脚之外,还有两个是使用差分信号传输(Differential Signal)的数据线,可能与你所想象的不一样,USB并不是全双工模式工作,也就是不能同时实现发送数据和接受数据,两根数据线是同时接受数据或者发送数据,他们的电信号振幅相同,相位相反。 这么做有4个好处,首先就是抗干扰能力强,外界的干扰同时干扰两根信号线,两者相减之后抵消,几乎就等于没干扰;再来就是因为两根线的信号相位相反,产生的电磁感应磁场也相互抵消,对外电磁干扰小;然后因为差分信号不是以电平高低为依据,因此受温度的影响也会降低;最后就是差分信号的电压可以做的比较小,降低设备的耗电量。有了以上的优点,USB成为了业界名副其实的统一传输接口,特别是USB 3.2 Gen 1加上TYPE-C接口,几乎坐实了一哥的位置。 USB2.0的传输速度是480Mbps,所以差分信号就是240MHz,而USB 3.2 Gen 1的传输速度提升到了5Gbps,差分信号猛的就增加到了2.5GHz,是不是觉得这个频率很眼熟?没错,我们的Wi-Fi信号用的频段就是2.4GHz,与USB3.0的频率极为接近。但是还是有0.1GHz的差距存在,严格来说也不一定会造成太大干扰,那么再来看下USB 3.2 Gen 1使用的另一项技术,频域扩展(Spread Spectrum Clock)。 USB3.0引入频域扩展 频域扩展技术是将中心频率分散到更宽的频域中通信的一种技术,日常生活中我们已经有很多产品是使用了这个技术的,比如CDMA通信,以及WLAN(IEEE 802.11系列标准)中都在使用这项技术。 USB 3.2 Gen 1中也使用了频域扩展技术,目的是为了减少高频带来的干扰,将原来集中在2.5GHz的频率往上和往下延伸,这样在2.5GHz的电磁波辐射能量就会降低了。 USB 3.2 Gen 1以2.5GHz为中心,频谱能量呈Sin函数绝对值分布,下一个能量集中的地方在三次谐波7.5GHz,所以USB 3.2 Gen 1线材规范中针对7.5GHz制定要求,所以下次买USB 3.2 Gen 1线的时候千万不要贪便宜买劣质线材哦。 成也萧何败也萧何 为了减少中心频率的电磁波辐射而引入的频域扩展技术,却给我们带来了意想不到的麻烦,没错,扩展的频率中刚好包含了2.4GHz频率,这个频率就是我们Wi-Fi中经常会用到,更不幸的是,2.4GHz频率因为离2.5GHz频率太近了,导致在这个频率范围内信号衰减很少,这就导致了USB 3.2 Gen 1会严重干扰到2.4GHz的信号传输,而5GHz频率因为与2.5GHz离的相对较远,信号几乎衰减的差不多了,因此使用5GHz的Wi-Fi路由器可以与USB 3.2 Gen 1共存使用。 其实还有一个更不幸的消息,USB 3.2 Gen 2传输速度提升到了10Gbps,差分信号到了5GHz,外加频域扩展技术,大家会很自然的想到5.8GHz的802.11a、802.11n、802.11ac乃至以后的802.11ax是否会受到影响。但答案是令人沮丧的,必定会影响,甚至在实测中发现最新MacBook也中招了。 应对办法 不幸的是目前行业上没有很好的解决办法,唯一的办法也只能是做做好USB 3.0的电磁屏蔽措施,可是频闭电磁波的方法在台式机或许还能使用,但是在笔记本上由于USB模块和WIFI模块实在是太近了,根本没有办法做到有效的屏蔽,所以在笔记本上,要么你只能用USB 3.0,要么只能用Wi-Fi,如果你又想用Wi-Fi又想用USB 3.0那么,你就花点钱买个5GHz频段的无线路由器,或者直接用网线吧。
LSD4RF-2R714N0拉距报告(14dBm SX1268平台模组拉距测试)
IIC波形问题分享 各位好,最近在调试IIC的时候遇到了SDA波形有半高电平的状态,下面分享一下解决的方法。 1.测试方法 通过IIC将数据0XEF写入eeprom中的0x01地址。整个操作过程如下且通过示波器测试波形 通信参数:起始信号+写0XA0+从机回ACK+写0X01+从机回ACK+写0XEF+从机回ACK+STOP 2.问题描述 注意:(以下图片中黄色为SDA,蓝色为SCK) 测试发现写入过程中,从机每次的ACK应答都会产生一个半高波形,如下图红框所示。 猜想:SDA在从机产生ACK应答时主机和从机发生了电平冲突。 关于ACK信号:主机写入过程中,当8bit写入完成后,在随后的第九个时钟上如果SDA为低,则主机收到ACK,若是SDA为高,则主机收到NOACK。 如下是有问题的程序关键部分: 从ACK的介绍和有问题的程序上看,当第八个bit完成时,SCL会拉低,然后在拉高。在SCL拉低的时候从机立即会进行数据变化,产生低电平(ACK信号),但是此时主机的SDA还是输出高状态,所以电平冲突,造成了半高电平的产生。 3.解决办法 从问题上看,说明是在从机发送ACK时两端产生了SDA控制权的冲突,导致了这个问题。因为SDA本身带有上拉,所以第一删除无用的SDA输出高语句,第二当需要主机发送高电平时,主机设置SDA为输入状态,通过外部的上拉将SDA稳定在高点平。程序和实际结果如下所示,可以看到ACK时的半高状态消除: 4.结论: 4-1.模拟IIC情况下,如果MCU支持开漏输出,则用开漏输出,因为开漏只能拉低不能拉高,这样不会造成电平冲突等问题。 4-2.如果用推挽输出的话,那么MCU在控制SDA引脚时, a) 输出高电平,则MCU设置SDA为输入状态,靠外部上拉将SDA稳定在高点平; b) 输出低电平,则MCU这只SDA为输出状态,且输出低电平。 c) 输入状态,MCU设置SDA为输入状态。
nand flash和nor flash Flash编程原理都是只能将1写为0,而不能将0写成1。所以在Flash编程之前,必须将对应的块擦除,而擦除的过程就是将所有位都写为1的过程,块内的所有字节变为0xFF。因此可以说,编程是将相应位写0的过程,而擦除是将相应位写1的过程,两者的执行过程完全相反。 (1)闪存芯片读写的基本单位不同 应用程序对NorFlash芯片操作以“字”为基本单位。为了方便对大容量NorFlash闪存的管理,通常将NOR闪存分成大小为128KB或64KB的逻辑块,有时块内还分扇区。读写时需要同时指定逻辑块号和块内偏移。应用程序对NandFlash芯片操作是以“块”为基本单位.NAND闪存的块比较小,一般是8KB,然后每块又分成页,页大小一般是512字节。要修改NandFlash芯片中一个字节,必须重写整个数据块。 (2)NorFlash闪存是随机存储介质,用于数据量较小的场合;NandFlash闪存是连续存储介质,适合存放大的数据。 (3)由于NorFlash地址线和数据线分开,所以NorFlash芯片可以像SDRAM一样连在数据线上。NOR芯片的使用类似于通常内存芯片,传输效率高,可执行程序可以在芯片内执行(XI P, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中.由于NorFlash的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。NandFlash共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难。 (4)NandFlash闪存芯片因为共用地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作;NorFlash芯片可以对字进行操作。所以在处理小数据量的I/O操作的时候的速度要快与NorFlash的速度。比如一块NorFlash芯片通常写一个字需要10us,在32位总线上写512字节需要1280us;NandFlash闪存写512字节需要的时间包括:512×每字节50ns+10us的寻页时间+200us的片擦写时间=234us。 (5)NandFlash闪存的容量比较大,最大容量己达到8G字节.为了方便管理,NandFlash的存储空间使用了块和页两级存储体系,也就是说它的存储空间是二维的,比如K9F5608UOA闪存块的大小为16K,每页大小是512字节,每页还16字节空闲区用来存放错误校验码空间(也称为out-of-band,OOB空间)。在进行写操作时,NandFlash闪存每次将一个字节的数据放入内部的缓存区,然后再发出“写指令”进行写操作。由于对NandFlash闪存的操作都是以块和页为单位的,所以在向NandFlash闪存进行大量数据的读写时,NAND的速度要快于NOR闪存。 (6)可靠性 NorFlash闪存的可靠性要高于NandFlash闪存,是因为NorFlash型闪存的接口简单,数据操作少,位交换操作少,因此可靠性高,极少出现坏区块,一般用在对可靠性要求高的地方。NandFlash型闪存接口和操作均相对复杂,位交换操作也很多,关键性数据更是需安错误探测/错误更正(EDC/ECC)算法来确保数据的完整性,因此出现问题的几率要大得多,坏区块也是不可避免的,而且由于坏区块是随机分布的,连纠错也无法做到。 (7)NANDFlash一般地址线和数据线共用,对读写速度有一定影响;NORFlash闪存数据线和地址线分开,相对而言读写速度快一些。 NANDFlash和NORFlash芯片的共性 首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,即先擦后写。只不过NORFlash芯片只用擦写一个字,而NAND需要擦写整个块。其次,闪存擦写的次数都是有限的。当闪存使用接近使用寿命时,经常会出现写操作失败;到达使用寿命时,闪存内部存放的数据虽然可以读,但不能再进行写操作了。所以为了防止上面问题的发生,不能对某个特定的区域反复进行写操作。通常NANDFlash可擦写次数高于NORFlash芯片,但是由于NANDFlash通常是整块擦写,块内的页面中如果有一位失效整个块就会失效,而且由于擦写过程复杂,失败的概率相对较高,所以从整体上来说NOR的寿命较长。 另一个共性是闪存的读写操作不仅仅是一个物理操作,实际上在闪存上存放数据必须使用算法实现,这个模块一般在驱动程序的MTD'(Memory Technology Drivers)模块中或者在FTLZ (Flash Translation Layer)层内实现,具体算法和芯片的生产厂商以及芯片型号有关系。通过比较可以发现,NAND更适用于复杂的文件应用,但是由于NAND芯片的使用相对复杂,所以对文件系统有较高的要求。 (8)接口对比 NorFlash带有通用的SRAM接口,可以轻松地挂接在CPU的地址、数据总线上,对CPU的接口要求低。NorFlash的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。如uboot中的ro段可以直接在NorFlash上运行,只需要把rw和zi段拷贝到RAM中运行即可。 NandFlash器件使用复杂的I/O口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。由于时序较为复杂,所以一般CPU最好集成NandFlash控制器.另外由于NandFlash没有挂接在地址总线上,所以如果想用NandFlash作为系统的启动盘,就需要CPU具备特殊的功能,如s3c2410在被选择为NandFlash启动方式时会在上电时自动读取NandFlash的4k数据到地址0的SRAM中.如果CPU不具备这种特殊功能,用户不能直接运行NandFlash上的代码,那可以采取其他方式,比如好多使用NandFlash的开发板除了使用NandFlash以外,还用上了一块小的NorFlash来运行启动代码。 (9)容量和成本对比 相比起NandFlash来说,NorFlash的容量要小,一般在1~16MByte左右,一些新工艺采用了芯片叠加技术可以把NorFlash的容量做得大一些。在价格方面,NorFlash相比NandFlash来说较高,如目前市场上一片4Mbyte的AM29lv320 NorFlash零售价在20元左右,而一片128MByte的k9f1g08 NandFlash零售价在30元左右。 NandFlash生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,这样也就相应地降低了价格。 (10)NandFlash器件中的坏块是随机分布的,以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。Nand器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用.在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。而坏块问题在NorFlash上是不存在的. 在Flash的位翻转(一个bit位发生翻转)现象上,NAND的出现几率要比NorFlash大得多.这个问题在Flash存储关键文件时是致命的,所以在使用NandFlash时建议同时使用EDC/ECC等校验算法。 (11)升级对比 NorFlash的升级较为麻烦,因为不同容量的NorFlash的地址线需求不一样,所以在更换不同容量的NorFlash芯片时不方便。通常我们会通过在电路板的地址线上做一些跳接电阻来解决这样的问题,针对不同容量的NorFlash。 而不同容量的NandFlash的接口是固定的,所以升级简单。 (12)读写性能对比 写操作:任何flash器件的写入操作都只能在空或已擦除的单元内进行。 NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为1。 擦除NOR器件时是以64~128KB的块进行的,执行一个擦除/写入操作的时间约为5s。擦除NAND器件是以8~32KB的块进行的,执行一个擦除/写入操作最多只需要4ms. 读操作:NOR的读速度比NAND稍快一些。 (13)文件系统比较 Linux系统中采用MTD来管理不同类型的Flash芯片,包括NandFlash和NorFlash。支持在Flash上运行的常用文件系统有cramfs、jffs、jffs2、yaffs、yaffs2等。cramfs文件系统是只读文件系统。如果想在Flash上实现读写操作,通常在NorFlash上我们会选取jffs及jffs2文件系统,在NandFlash上选用yaffs或yaffs2文件系统。Yaffs2文件系统支持大页(大于512字节/页)的NandFlash存储器。
通俗理解BLE 1.GAP(generic access profile) 管理连接、广播和发现以及安全验证。 2.GATT(generic access attribute profile) 通用属性配置文件(GATT)在属性协议(ATT)的基础上构建,为属性协议传输和存储数据建立了一些通用操作和框架。 3.ATT(attribute profile) ATT的唯一基础是属性,规范对设备的属性一系列操作,如 write、read、find info等。 a)CENTRAL(MASTER): GAP role,例如手机、平板或者电脑,查找正在广播的从设备,初始化连接、修改连接参数。 b)PERIPHERAL(SLAVER): GAP role, 一般是一个嵌入式设备,依靠电池并且比较省电的。c)CLIENT:向另外一个设备(server)读取数据或者写入数据。一个设备可以既是client也是server。 d)SERVER: 提供数据给其他设备(client)。一个设备可以既是client也是server。 1)PROFILE: 规范了由一系列service构成的表现,如心率计等。 2)SERVICE:由特征值组成,和其他service组合描述了设备的具体行为能力。 3)CHARACTERISTIC: 特征值,包含user data 和metadata, 通过可读、可写、描述符来描述。 4)WRITE: 改变属性值的请求。 5)READ: 获取属性值的请求。 6)NOTIFICATION:发送给已注册的客户端提示某个属性值的改变,不需要应答。由server来初始这个动作。 7)INDICATION:和NOTIFICATION类似,但是需要应答。也是由server来初始化这个动作。 BLE发展大事记: 1. 2010年,蓝牙4.0规范出世。 2.第一步支持BLE的手机,iphone4S. 3.2013年12月,蓝牙4.1规范应时而生,同事支持多个role。 4.2014年12月,蓝牙4.2规范发布,支持安全验证,IP互联,提升了速率。大量适用于物联网。 5.2016年12月,蓝牙5.0规范发布,相较于前一版本,2倍的SPEED, 4倍的RANGE, 8倍的ADVERTISING。 BLE主要技术参数: 1.频率范围:2.400GHz--2.4825GHz ISM BAND。 2.通道: 40 X 2MHz per channel。 3.范围: 30--400M。 4.速率: 高达2MBIT/S。 5.安全验证: 128-BIT AES。 6.功耗:0.01--0.5W。 7.峰值电流:<15ma。
802.11n是如何实现600Mbps速率的 802.11n已经成为当前Wi-Fi的主流产品。我们来看看802.11n是如何在802.11a/g的基础上在物理层实现600Mbps的传输速率的。 Wi-Fi联盟在2007年6月25日发布的802.11n draft2.0保证802.11n设备之间基本的兼容性和功能。制造商开始依据规范生产802.11n设备。802.11n在2009年9月成为了无线局域网行业的主流。因为最终的标准兼容以前的draft2.0全部内容,任何draft2.0设备也是一个802.11n设备。最大的区别是,802.11n draft2.0支持2SS (空间流)可使最大网络吞吐量达到300Mbps,而最终的802.11n支持使用4SS 使得吞吐量最大到600Mbps。我们来逐个分析802.11n提高速率的因素。 802.11n的主要特点是物理层采用OFDM和MIMO技术。 1)子载波 OFDM技术将20 MHz频段划分成每个312.5khz宽的子带共形成64个子载波。 312.5KHz X 64=20MHz 后部6个和前部5个子载波没有用于数据传输,以防止相邻信道之间的干扰。中心的一个子载波和四个导频子载波也没有用于数据传输.。于是总的有16个子载波没有用于数据传输。48个子载波进行数据传输的802.11a/g的最大吞吐量为54Mbps的。802.11 a/g子载波可以通过采用不同的调制技术以取得各种各样的数据速率。 在802.11n中增加4个额外的子载波进行数据传输,共52个子载波。这增加了一个额外的11mbps速率使得最大吞吐量达到65Mbps。 2)保护间隔 保护间隔是射频信号之间的延迟时间,以补偿前一个射频信号(如传播延迟、回波和反射)的负效应。在802.11a/g的 OFDM条件下保护间隔是800ns。信号间干扰是当前一个射频信号完全接收之前一个新的射频信号已到达。这样的干扰构成信噪比。当发送方与接收方同意的条件下,一个可选的400nsec保护间隔可以用在802.11n系统中。在保护间隔减少了400ns的情况下可增加7Mbps数据率,。可使得吞吐量从65 Mbps增加到72Mbps。 3)40MHz信道连接和恢复四个子载波 802.11a/g网络只能使用20MHz带宽的频段,而802.11n网络可以使用20MHz和40MHz带宽的频段。新的40MHz频段是通过连接两个相邻的20 MHz频段得到的。 不同于以往的20MHZ频段,数据传输中需要缓冲子载波用于以防止相邻信道的干扰,新的40MHz信道两个20 MHz信道连接的地方不需要这些缓冲子载波。因此,四个子载波为数据传输另外增加6Mbps的吞吐量。 40MHz信道增加吞吐量为72Mbps x 2(2频段连接)+ 6Mbps(取消相邻信道干扰的缓冲区恢复的子载波)= 150Mbps。简单来说,40MHz信道绑定产生了二车道公路的效果。 4)MIMO 我们谈MIMO之前需了解多径效应是怎么回事。想象一下,AP安装在您的客厅里而无线局域网笔记本电脑在厨房里使用。从AP发送的射频信号到达笔记本电脑有各种不同路径。包括直接的路径,通过镜面反射的路径,其他的路径有通过地面反射的,由一个木制的椅子衰减的信号,或冰箱的涂层材料的折射等等。多径是指从发送方到达接收方信号走的不同路径。 传统的802.11a/b/g模型只有一个Tx和Rx天线可用。即使安装了两个天线,其中一个是作为备用。在上面的例子中,收件人笔记本电脑有空间上隔开的天线A和天线B,天线A可以接收一个较好的信号,而天线B的功能仅是作为备份天线用。 这样一个只使用一个Rx和Tx天线的系统称为SISO(单输入单输出)系统,这是与MIMO系统相对而言的。802.11a/b/g均是单输入单输出系统。 顾名思义,MIMO系统可以同时接收和发送多个输入和输出的信号,在上面的例子中,天线A和B同时发送Tx信号,而接受天线也同时接收多个射频信号。在MIMO系统中,上述的多路径提高了信噪比。这就是为什么一个11n系统可以在多路径环境下反而提高了性能。不同于以往的SISO系统,MIMO系统可以组合两个接收天线增加信号的信噪比。 空间流(Spatial Stream)意味着可以在不同的空间发送和接收多个流。前面已经介绍了,802.11n在40MHz信道通过连接频段和恢复子载波使得吞吐量增加到了150Mbps。这150Mbps就成为MIMO系统中的一个空间流。两个同步空间流就有300Mbps的最大吞吐量,3个空间流有450Mbps,4个空间流就是600Mbps吞吐量。OFDM 5GHz信道为8个频段,因此一个802.11n系统的最大吞吐量可达600Mbps。 总之,最大吞吐量基于保护间隔的大小,空间流数,和子载波数量。 例如,一个系统为2SS(空间流),一个20MHz的信道,和400ns保护间隔则其最大吞吐量为144Mbps。如果保护间隔改为800ns,其它同等配置则最大吞吐量为130Mbps。draft2.0只支持两个空间流。802.11n标准允许最多4个空间流来创造最大的4x150Mbps=600Mbps。注意,虽然大多数802.11n设备支持至少2空间流,但是最新流行的平台也有只支持一个空间流的。虽然有一些笔记本电脑支持3个空间流,但是移动设备可能不需要4个空间流。3个空间流已经提供了一个450Mbps的最大速率。需要高数据速度的应用程序,如AP到AP通信的设备会希望利用较多的空间流。 下图是一个802.11n如何从54Mbps传输速率提高到600Mbps的示意图。
用RSSI来实现信道空闲检测和信号防碰撞 RSSI,全称Received Signal Strength Indication,是指接收的信号强度。 以SX1208为例,其RSSI块计算接收器通道带宽内可用的能量量。其计算得到的RSSI值会与型号强度在一定范围内成正比,当信号强度大于一定值,RSSI便会饱和。 当一个相同存在多个发射端与一个接收端通信时,往往会面临信号碰撞的问题。 利用RSSI检测接收器通道带宽内的信号强度的这个特点,我们可以用其来检测判断信道内是否有较强的信号在传输或者有较强的干扰等,从而来规避与其信号或者干扰的碰撞。 在发送数据前,我们增加检测RSSI这一步骤来监测信道是否空闲。所以在发送前先切换至接收模式,然后去检测RSSI值,当信道是空闲的时候,RSSI值往往会低于某个值X,这个值可结合规格书数据和实际测试得到,当读取到RSSI低于X,则可认为信道中没有信号正在传输,则可以切换至发射模式正常发射。当RSSI大于X,则可认为有信号正在传输或者存在一个较大的干扰,这种情况因避免信号碰撞,所以可以取消或者延迟本次的数据发送。 实际测试中,两个发射器同时定时发送,频点和速率等配置皆相同,两个发射器定时发送的频率不同以保障其有更高的概率碰撞,当不加入RSSI检测,通信中可观察到接收端时不时会有错包的现象,这表明有多个信号在空中发射碰撞导致数据错误。当加入RSSI检测并以LED灯反馈,可观察到当其中一个模块正在发射,另一个模块主动规避,推迟了本次发射,而在接收端也没有出现明显错包的现象。
Alios Things之信号量 1、前言 为了避免软件访问共享资源时互相影响甚至冲突,一般在保护共享资源时,有以下几种处理方式:开关中断、信号量、互斥量、锁。 多任务可以通过获取信号量来获取访问共享资源的门禁,可以配置信号量数目,让多个任务同时获取门禁。当信号量无法获取时,相关任务会通过优先级排序来等待信号量释放,并让出CPU资源;其缺点是存在高低任务优先级反转问题。 2、信号量与任务状态关系 当调用krhino_sem_take()时,若信号量已被占用,任务将由RDY状态进入PEND状态;krhino_sem_take/give超时情况下,任务将由PEND状态进入RDY状态。当任务为PEND状态时,若有其他任务调用krhino_task_suspend(),任务将由PEND状态进入PEND_SUSPEND状态;当任务为PEND_SUSPEND时,若有其他任务调用krhino_task_resume(),任务将由PEND_SUSPEND状态进入PEND状态。 3、信号量的操作 ①静态创建 k_start_t krhino_sem_create(ksem_t sem, const name_t name, sem_count_t count) sem占用的内存由使用者直接传入,不在内部申请内存。 ②动态创建 k_start_t krhino_sem_dyn_create(ksem_t **sem, const name_t *name, sem_count_t count) sem占用的内存在创建接口内部通过krhino_mm_alloc申请。 ③静态删除 k_start_t krhino_sem_del(ksem_t sem, const name_t name, sem_count_t count) ④动态删除 k_start_t krhino_sem_dyn_create(ksem_t **sem, const name_t *name, sem_count_t count) 两者的区别在于动态删除需要释放sem占用的内存,其他的处理并无差异。 4、信号量的获取与释放 ①sem获取 k_start_t krhino_sem_take(ksem_t *sem, tick_t ticks) 信号量获取分为以下四种情况: 成功获取:信号量的count计数大于0,表示未完全占用,返回take信号量成功。 非等待获取:ticks设置为RHINO_NO_WAIT,表明当前如果无法获取信号量,直接返回错误RHINO_PEND_WAIT。 设置最大等待时间:ticks设置为非0、非全F有效值,当前任务会被加入tick的延时队列,当达到延时时间后,如果任务还被阻塞,返回超时RHINO_BLK_TIMEOUT。 无限等待:ticks设置为全F,则该任务会永久等待此信号量。除非使用信号量删除接口krhino_sem_del,或者强制任务调度接口krhino_task_wait_abort。 ②sem释放 释放接口包括唤醒单个任务和唤醒多个任务: kstart_t krhino_sem_give(ksem_t sem) kstart_t krhino_sem_give_all(ksem_t sem) krhino_sem_give只会将当前阻塞在此信号量的最高优先级任务恢复; krhino_sem_give_all会将阻塞在此信号量的所有任务恢复。 恢复过程分为以下几个步骤: 如果当前信号量没有任务阻塞,则信号量count++,并返回成功; 否则唤醒单个或多个优先级任务; 将唤醒任务从tick延时队列中删除。 4、使用注意事项 中断禁止信号量获取检测 信号量的获取接口在中断上下文调用时很容易发生死锁问题。当被打断的上下文和打断的中断上下文要获取同一个信号量时,会发生互相等待的情况。本内核会在take信号量时进行检测,如果是中断上下文,则直接返回失败。 占用信号量非等待、永远等待、延时使用的区别 krhino_sem_take传入延时ticks为0,获取不到信号量会立即报失败;ticks为全F时,会永远在此等待,直到获取到信号量,可能会造成该任务无法继续进行;其他值标识有最大延时上限,达到上限时,即使未获取到信号量,tick中断处理也会将任务唤醒,并返回状态为超时。 信号量优先级反转问题 当高优先级的任务需要的信号量被低优先级任务占用时,CPU资源会调度给低优先级的任务。此时,如果低优先级任务需要获取的另一个信号量被中优先级的PEND任务所占用,那么低优先级的任务就需要等待中优先级的任务事件到来,并释放信号量,就出现了高中优先级任务并不是等待同一个信号量,导致中优先级任务先运行的现象。 该优先级反转缺陷,在互斥机制中得以解决,其途径在于动态提高低任务运行优先级来避免任务优先级的反转问题。
1
下一页