Contiki协议栈
2015-09-07 19:20
225 查看
Contiki协议栈
一.协议栈总体框架
Contiki系统为了支持多种硬件平台和软件协议设计了如图1.1所示的层次框架,通过contiki-conf.h的宏定义用户可以灵活地选择协议类型,如:#define NETSTACK_CONF_NETWORK rime_driver
#define NETSTACK_CONF_MAC csma _driver
#define NETSTACK_CONF_RDC cxmac_driver
#define NETSTACK_CONF_RADIO sx1278_radio_driver
#define NETSTACK_CONF_FRAMER framer_nullmac
图1.1协议栈层次
Contiki V2.7支持的各层次协议类别如图1.2所示,其中NETSTACK_MAC是一个概念层次,真正处理MAC逻辑是由NETSTACK_RDC(Radio
Duty Cycling)完成的;而NETSTACK_RADIO层支持的射频驱动,用户可以自由扩展。
图1.2 Contiki V2.7支持的协议类型
二.收发Radio Packet的调用与时序
1. 接收Radio Packet
图2.1显示了接收Radio Packet的调用逻辑与时序,当射频硬件接收到数据包时ISR通知rf_process,rf_process自底向顶调用:RDC->MAC->NETWORK协议栈的接收函数,最后将数据包提交给应用程序绑定的进程。图2.1接收Radio Packet
2. 发送Radio Packet
如图2.2所举例,process_i需要发送abc(Anonymous best-effort local area Broad Cast)数据包,进程自顶向底调用:MAC->RDC->RADIO协议栈的发送函数,最后通过射频硬件以无线电方式传输。图2.2发送Radio Packet
三.CSMA(Carrier Sense Multiple Access)协议原理
CSMA协议提供相对可靠的MAC层传输,每次调用RDC层发送数据包后,它根据反馈信息判断是否需要缓存并重传该数据包。CSMA的关键数据结构如图3.1所示,struct neighbor_queue根据不同的接收地址缓存数据包;struct
rdc_buf_list将同一个接收地址的不同PACKETBUF_ATTR_MAC_SEQNO的数据包进行链接;struct queuebuf保存需要重传的数据包头和数据实体;struct qbuf_metadata存储回调函数指针等信息。
图3.1 csma关键数据结构
CSMA根据RDC层发送数据包的反馈信息选择相应逻辑动作:
MAC_TX_OK:发送成功,回收缓存数据结构和善后工作;
MAC_TX_NOACK:启动ctimer,随机延时后重传,直到发送次数超过MAX;
MAC_TX_COLLISION:继续重传,且发送次数不受限。
一个CSMA的典型时序如图3.2所示,当RDC层发送完数据包后,CSMA的回调函数packet_sent()根据发送结果选择动作(见上面逻辑描述),如果需要重传则根据重传次数选择一个随机时间设置ctimer,当ctimer定时器超时后再次发送该缓存的数据包。
图3.2 csma逻辑与时序
作者简介:
蒋俊,男,硕士研究生,现任长沙市锐米通信科技有限公司CEO。
从事通信研究与嵌入式开发10年,主攻微功率无线网络。
精通LoRa无线扩频通信,无线星型/树型/MESH网络设计;
通晓Contiki,Linux,uC/OS-II,OSAL等操作系统;
熟悉ARM,DSP,STM8,PIC,PC104等处理器;
擅长AD,RF等集成IC开发。
Web:
www.rimelink.com
EMail:
jiangjunjie_2005@126.com
QQ群:35212129
相关文章推荐
- 控制自定义Dialog的大小和位置(计算器对话框的制作)
- JAVA使用正则表达式Demo
- Contiki rtimer原理与移
- 第二周项目—C/C++语言中函数参数传递的三种方式
- Linux下搭建tomcat集群全记录
- VR和AR将如何发展下去?哪个更有前景?
- 3中判断类型的方法
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解
- Contiki开发要点
- MySQL中显示乱码的问题
- LeetCode_binary-tree-zigzag-level-order-traversal
- Android ContentObserver ---拦截短信并删除
- Contiki内核原理
- 数据存储(sharedPreferences,内部存储,外部存储,SQLite数据库,网络存储)
- mif文件生成方法
- JavaScript语言精粹 笔记03 继承
- MFC学习笔记(三)
- HDU5425Rikka with Tree II(数学期望)
- linux网络服务器笔记
- Android之Intent全面解析及用法