串口

IIC挂死问题解决过程

安稳与你 提交于 2019-12-03 20:59:59
0.环境:arm CPU 带有IIC控制器作为slave端,带有调试串口。 1.bug表现:IIC slave 在系统启动后概率挂死,导致master无法detect到slave。 猜测1:认为IIC device程序有问题 检查1:查看程序发现有可能溢出的部分,使用IIC 工具刷过量数据到slave,未出问题。 猜测2:认为IIC device寄存器进入异常状态未能恢复 检查2:检查正常IIC寄存器和异常状态IIC寄存器,未能发现问题。 猜测3:时钟分频问题 检查3:询问同事,答固定分频。 猜测4:看波形分析 检查4:波形未量到,测量波形导致通信异常,部分设备破坏,放弃该方法。 2.发现新情况:系统启动过程中如果调试串口有数据输入,问题会概率出现。如果串口没有输入则多次测试不会出现问题。 猜测1:串口中断导致IIC初始化时被打断产生问题。 检查1:删除调试串口设备树节点,发现IIC启动100%出现问题 T-T。 猜测2: 100%复现的问题和之前的概率出现的问题相同 检查2:检查寄存器,检查设备detect 表现,认为是相同问题。 3.删除调试串口,IIC受影响的原因? 删除串口设备树节点,IIC device 必出问题。 猜测1:怀疑调试串口外部硬件电平高低导致IIC外设受影响 检查1:检查原理图,未发现影响的可能性。 猜测2:怀疑串口初始化部分处理了部分IIC设备依赖的初始化

ARM---搭建开发板的开发环境(x210v3s)

穿精又带淫゛_ 提交于 2019-12-03 14:59:25
以x210v3s为例 开发板介绍: 1、x210v3s,由深圳九鼎创展生产,目前已经停产。 2、CPU由三星公司生产叫S5PV210,目前已经停产。 3、S5PV210采用ARMv7架构CortexTM-A8系列。 4、支持android4.0和android2.3,Qt4.8。 5、启动设置:   拨码开关在下:通过USB口启动,   拨码开关在上:是通过SD卡启动,优先内置的SD卡(硬盘),如果内置的SD卡,没有启动信息,则会从外置的SD卡启动。 6、串口:   CPU带了四串口接口,但此开发板只外接了两个串口(UART0和UART2)。   注意,默认 andorid2.3,WINCE 使   用 uart0 作为调试串口,android4.0 和 linux 使用 uart2 作为调试串口。 7、SD卡槽:   有两个SD卡槽,只有右侧可以使用。 8、LED和蜂鸣器:   一个蜂鸣器,有5个LED,其中一个电源指示灯。   用于调试程序。 9、电源:   此开发板采用了电源管理芯片,长按3秒才能开机。   如果没有电源锁定程序,松开后会立即断点。 搭建开发环境的步骤: 1、安装USB转串口的驱动,安装完成后重启。   查看串口信息,设置编号,设置波特率。   右击此电脑->管理->设备管理器->串口->USB-to-Serial->右击属性->端口设置-

quartus使用串口IP模块

烈酒焚心 提交于 2019-12-03 11:40:30
在quartus平台中使用串口模块的IP,需要使用到platform designer软件来实现。 1、在quartus界面调出IP Catalog界面。 2、在IP catalog中搜索UART,找到RS2323模块,并双击打开,选择合适的路径和存放。 3、使用该模块若不搭建nios软核,则使用streaming。 在右上角电机Block Symbol或者在菜单选择View->Block Symbol打开模块符号。 4、串口配置了波特率,其自动配置的参数与时钟有关,因此需要加入时钟模块,告知系统输入时钟为多少。 操作如下: 5、打开系统连接的界面,为其添加时钟输入模块。 6、在IP搜索栏搜索clock,双击选择的模块添加时钟模块,输入模块。 7、根据板载资源,设置时钟的参考时钟。 8、连接时钟模块和串口模块的clk和reset。 9、点击Generate HDL生成模块。 10、在quartus中添加生成的sys系统。 11、从platform designer生成模块实例将实例拷贝到添加到quartus的顶层文件中,添加写数据和读数据的时序。 这里只测试一下串口发送数据的功能,接收数据的操作基本是一样的。 12、在platform designer查看串口模块发送数据的时序。 同理在这里一样可以查看到接收数据的时序。 需要注意的是,时序中的数据其实是在to_uart

contiki 开发日记之串口开发

前提是你 提交于 2019-12-03 08:34:46
cc2430平台有2个串口uart0(P0_2,P0_3) 和uart1(P0_4,P0_5) 在contiki开发过程中因为牵扯到步骤调试这里有 platform/sensinode-debug.h文件。 里面的putstring即相当于printf在其他编译器中控制台输出功能。 在加入头文件后即可实现printf函数的使用。 其中注意platform/contiki-conf.h头文件。此文件是配置contiki的各种资源。 如果你在使用uart0_init()会报错的情况下,需要设置里面的资源,如下: /* * UARTs: 1=>Enabled, 0=>Disabled. Default: Both Disabled (see uart.h) * Disabling UART0 saves ~200 bytes of CODE. * Disabling UART1 saves ~500 bytes of CODE but also disables all debugging * output. Should be used when nodes are meant to run on batteries * * On N740, by enabling UART1, you are also enabling an ugly hack which aims * to

IAR 串口发送问题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:29:16
今天调试STM8S,用串口发送汉字字符串,PC接收端竟然是乱码,经过一顿查找,发送没问题,接收没问题,竟然是IAR中文设置有问题:default character:chinese simplified(gb2312),设置后去掉 auto-detect character encoding前面的勾。 也可以在程序里右键直接设置。(附图片) 换了新单片机,连IAR都来凑热闹嘛~~~ 来源: https://www.cnblogs.com/firegod01cn/p/11783163.html

Linux 串口驱动初始化前置定位crash log

浪子不回头ぞ 提交于 2019-12-03 06:41:50
在kernel串口驱动初始化前crash时,无log输出,只有到lk的log: [5980] booting linux @ 0x80008000, ramdisk @ 0x82300000 (1023690), tags/device tree @ 0x82100000 --- a/kernel/msm-3.18/drivers/tty/serial/msm_serial_hs_lite.c +++ b/kernel/msm-3.18/drivers/tty/serial/msm_serial_hs_lite.c @@ -2032,7 +2032,7 @@ EARLYCON_DECLARE(msm_hsl_uart, msm_hsl_earlycon_setup); OF_EARLYCON_DECLARE(msm_hsl_uart, "qcom,msm-hsl-uart", msm_hsl_earlycon_setup); #endif -module_init(msm_serial_hsl_init); +arch_initcall(msm_serial_hsl_init); module_exit(msm_serial_hsl_exit); MODULE_DESCRIPTION("Driver for msm HSUART serial device"); 修改前: [ 1

串口阻塞与非阻塞

ε祈祈猫儿з 提交于 2019-12-03 04:52:28
阻塞模式:(默认) VTIME定义要求等待的时间量(取值不能大于cc_t)。 VMIN定义了要求等待的最小字节数。 options.c_cc[VTIME] = X;   //设置从获取到1个字节后开始计时的超时时间(单位为分秒,秒的十分之一) options.c_cc[VMIN] = Y;   //设置要求等待的最小字节数 在原始模式下对read()函数的影响: 1、X=0,Y!=0。函数read()只有在读取了Y个字节的数据或者收到一个信号的时候才返回; 2、X!=0,Y=0。即使没有数据可以读取,read()函数等待X时间量后返回; 3、X!=0,Y!=0。第一个字节数据到时开始,最先满足收到Y个字节或达超时时间X任意一个条件,read()返回; 4、X=0,Y=0。即使读取不到任何数据,函数read也会立即返回。 示例: 通过串口连ID卡读卡器,要求读串口至少收6个字节数据立即返回,可以将串口的上述两个设置项设置如下: options.c_cc[VTIME]=0; options.c_cc[VMIN]=6; 非阻塞模式:O_NONBLOCK VTIME定义要求等待的时间量(取值不能大于cc_t)。 VMIN定义了要求等待的最小字节数。 options.c_cc[VTIME] = X;   //设置从获取到1个字节后开始计时的超时时间(单位为分秒,秒的十分之一) options

Java 串口通信 Ubuntu

眉间皱痕 提交于 2019-12-03 04:36:41
说一下我的操作过程吧 在Windows上先用 阿猫串口网络调试助手 ,进行调试; 在网上找Java代码,我选择的是 RXTXcomm ,网上代码很多,基本都一样。 在Windows电脑上把rxtx压缩包中的 rxtxSerial.dll (与当前系统对应)放入jdk1.8.0_221\jre\bin目录中(事实上放在项目启动时能加载到的地方都可以) 程序中使用 COM1 串口,9600波特率可以运行。 然后到了Ubuntu,Ubuntu上的串口不叫COM1,而是叫tty*。直接用串口的话叫/dev/ttyS*,用usb的话叫/dev/ttyUSB*,*为0-n。我用的两台电脑上一个是0-127,一个是0-63. 由于tty属于“dialout”组别,先把当前用户加入到这个组别, sudo gpasswd --add user1 dialout ;我在这里重启了一下系统 用 dmesg | grep tty 看看系统启动过程中初始化了哪些串口设备 [ 0.000000] console [tty0] enabled [ 1.080575] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A [ 1.101658] 00:02: ttyS1 at I/O 0x2f8 (irq = 3, base

AT命令集详解

南楼画角 提交于 2019-12-03 02:36:13
1.2 AT的优点。 命令简单易懂,并且采用标准串口来收发AT命令,这样对设备控制大大简化了,转换成简单串口编程了。 AT命令提供了一组标准的硬件接口--串口。这个简化的硬件设计.较新的电信网络模块,几乎都采用串口硬件接口。 AT命令功能较全,可以通过一组命令完成设备的控制,完成呼叫、短信、电话本、数据业务、传真. 1.3 AT命令与ppp协议的关系 在数据通讯的应用中,比如说无线拨号上网。除了AT命令,还会常听到另外一个网络协议ppp(Point to Point Protocol)。 在应用串口通讯的场合,我们可以从硬件上明确看到分为两大块。 DTE(Data Terminal Equipment)数据终端设备。通常是一个智能设备,如PC机,嵌入式主机等,用于发送AT命令和PPP命令, 还有用于链路通讯的DCE(Data Circuit Terminal )数据电路终端。用于与外界建立通讯的链路。 DTE与DCE之间用串口相连。比如PC机用串口接入拨号MODEM时,PC机是DTE,拨号MODEM是DCE. AT和PPP的相同点都是由DTE发送给DCE的协议。不同点是AT只用于DTE来控制DCE。比如初始化设备,用于发送呼叫,发送短消息等,虽然AT有规范,但是大部分DTE产商都扩展了一些AT命令。 而PPP是用于数据通讯,是DTE与远程的接入服务器(Access Server

安卓串口开发类库,含演示源码

左心房为你撑大大i 提交于 2019-12-03 01:54:27
关于安卓串口开发,这篇文章写的比较明白: https://blog.csdn.net/qq_35952946/article/details/78863871 但是用这个方案代码会报错: java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations 这个因为编译的 so 文件太旧了。 下面的示例源码中,修改了上述问题,并提供演示示例,可正常运行。 使用方法: 获取串口列表 SerialPortFinder serialPortFinder = new SerialPortFinder(); return serialPortFinder.getAllDevices();    打开/关闭串口: ///dev/ttyS1后面的数字1,是串口编号,根据实际情况修改 final SerialPortUtils portUtils = new SerialPortUtils("/dev/ttyS1",57600,0); portUtils.openSerialPort(); portUtils.closeSerialPort();    处理收到的数据: //串口数据监听事件 portUtils.setOnDataReceiveListener(new SerialPortUtils