文档章节

Ember模块笔记——排查串口硬件流控问题

临峰不畏
 临峰不畏
发布于 2016/12/03 12:13
字数 625
阅读 467
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

#背景 Ember库在RTL8196的Linux上运行不正常。经我们的小伙伴精密地排查,问题不在硬件板子、串口驱动、EM3581固件上。因为我们自己写的串口硬件流控Demo在嵌入式Linux上是正常的。那么,问题只能定位为Ember库在处理硬件流控中,由于平台的原因导致的异常。

#正文 对于这个问题,我的首先能想到的就是Ember代码关于串口的配置部分。首先找到程序入口:

这个函数 emberAfMain()函数的参数,实际是:emberAfMain(5, "emberAfMaim -n 0 -p ttyS1")
进入该函数,在文件 protocal/zigbee_5.7/app/framework/util/af-main-host.c 文件中:

其中L519是在解析 MAIN_FUNCTION_PARAMETERS(其实就是int argc, char *[]args) 中参数的。然后再在L525对串口进行配置。
进入 emberAfMainStartCallback() 函数去看:

emberAfmainStartCallback(int *ret, int argc, char **argv)
 ` ezspProcessCommandOptions(argc, argv)
     `ezspInternalProcessCommandOptions(argc, argv, errStr)

最终是在 ezspInternalProcessCommandOptions(int argc, char *argv, char *errStr)中对参数进行解析,在 protocal/zigbee_5.7/app/ezsp-host/ash/ash-host-ui.c,代码如下:

其中我们很关心的两个参数的处理分别为:

从代码可以看出"-n" 这个参数只作为第一个参数,它调用了ashSelectHostConfig(cfg),cfg就是"-n"的参数,这里我们填的是0。
去看 ashSelectHostConfig(),定义在 protocal/zigbee_5.7/app/ezsp-host/ash/ash-host.c:

ashSelectHostConfig()的功能是选择一个配置模板。这也是为什么"-n"参数一定要排在最前面的原因了,后面的参数是对这个模板进行修改。 在L157~159,如果cfg小于ashHostConfigArray数组的长度,那就 ashHostConfig = ashHostConfigArray[cfg]
我们去看看 ashHostConfigArray数组的定义:

L95是ashHostConfigArray[0],被定义成了宏 ASH_HOST_CONFIG_DEFAULT;L97~116为ashHostConfigArray[1]
我们去看 ASH_HOST_CONFIG_DEFAULT 定义:

在L69行的值为true,即开启硬件流控。
从L87来看,ashHostConfig的默认值就是 ASH_HOST_CONFIG_DEFAULT,即开启了硬件流控的。
AshHostConfig 的定义如下:

其中L53定义了硬件流控字段rtsCts。为了查问题,我们直接去找 rtsCts的引用处,找到如下:
protocal/zigbee_5.7/app/ezsp-host/ash/ash-host-io.c
readConfig(rtsCts)其实就是个宏,它展开为:ashHostConfig.rtsCts,就是我们上面看到的设备。
我们要注意两个变量:rtsCts,flowControl,因为下面引用到了:


它设置了两个串口配置参数:tios.c_iflag, tios.c_cflag。这个是重点排查对象!!
好,通过打调试信息来区别我们Demo与Ember库之间的差异。

© 著作权归作者所有

临峰不畏
粉丝 223
博文 187
码字总数 98583
作品 0
深圳
架构师
私信 提问
加载中

评论(0)

Python中serial的使用---树莓派

一、概述 pyserial模块封装了对串口的访问。 二、特性 在支持的平台上有统一的接口。 通过python属性访问串口设置。 支持不同的字节大小、停止位、校验位和流控设置。 可以有或者没有接收超时...

osc_y7ckpzr9
2019/04/26
1
0
serial port 的操作

import serial ①选择设备 ser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5) #使用USB连接串行口 ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5) #使用树莓派的GPIO口连接串行口 ......

osc_m8gznli2
2019/07/08
4
0
stm32串口USART 硬件流控 --学习笔记

  流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口、流控的定义。大家一定了解,RS232 中的“RS”是Recommend Standard 的缩写,即”推荐标准“之意,它并不像 IEEE-1284、I...

osc_cnd9jz7d
01/07
1
0
2017.10.22 Ardupilot开发者大会会议笔记,绝对干货满满!

在国内举办的首届Ardupilot无人机开发者大会,可以说是国内无人机领域的大事情,大咖云集。Ardupilot官方开发者都来到现场,在这里要为他们的开源精神点赞。社区开发者们都很nice,现场会有很...

msq19895070
2017/12/13
0
0
基于pyserial【Python串口通信】

前言 Python串口通信有多种方式,本文是基于基于pyserial实现的。首先安装pyserial依赖库,了解常用的方法函数,认识Serial参数说明;然后电脑查看可用的端口,举个简单示例:能自动检测串口...

小溥
05/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何设计可以动态扩容缩容的分库分表方案?

面试题 如何设计可以动态扩容缩容的分库分表方案? 面试官心理分析 对于分库分表来说,主要是面对以下问题: 选择一个数据库中间件,调研、学习、测试; 设计你的分库分表的一个方案,你要分...

深山老猿
20分钟前
9
0
微信开发直接访问本地调试

一、官网下载使用ngrok 1、下载你的版本:https://ngrok.com/ 例:我下载的windows64位版本的。 2、(windows版)解压后双击运行。 3、注册帐号:还是在首页找到注册入口 4、注册成功后的页面...

osc_4dady4pk
21分钟前
13
0
974. 和可被 K 整除的子数组

思路 前缀和 同余定理 暴力解 计算前缀和 遍历 计算nums[j..i] 的和,是否为k / 是否 %k == 0. from typing import Listclass Solution: def subarraySum(self, nums: List[int], k:...

hyhlinux
22分钟前
11
0
mysql配置文件-my-innodb-heavy-4G.cnf中文注释

#BEGIN CONFIG INFO#DESCR: 4GB RAM, InnoDB only, ACID, few connections, heavy queries#TYPE: SYSTEM#END CONFIG INFO## This is a MySQL example config fil......

osc_nt0jrqne
22分钟前
6
0
第四次课:Python运算符

和其他编程语言一样,Python也拥有运算符,用于执行程序代码运算,常用的运算符有1. Python算术运算符2. Python关系运算符3. Python赋值运算符4. Python 逻辑运算符,下面就依次介绍下各个运...

osc_ykahofah
23分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部