找回密码
 注册
关于网站域名变更的通知
查看: 486|回复: 1
打印 上一主题 下一主题

(二)「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-1 14:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Tronlong123 于 2021-9-1 15:01 编辑 & v+ i/ p8 ~7 S9 y9 i. H. w, U, z+ y
/ {* j8 ^' a$ F  ]
目录
4.tl_can_echo案例
4.1 案例功能
4.2 操作说明
4.3 关键代码
5 tl_devmem_rw案例
5.1 案例功能
5.2 操作说明
5.3 关键代码
6 tcp_udp_demos案例
6.1 案例功能
6.2 操作说明
6.3 关键代码
4 G8 R- v# _/ r- W, a
本篇文章,咱们继续分享几个Linux应用开发案例,分别是tl_can_echo案例、tl_devmem_rw案例、tcp_udp_demos案例这三个较为常见的Linux开发案例,并配备关键代码,本次延续使用创龙科技的TL335x-EVM(AM3352/AM3354/AM3358/AM3359)ARM Cortex-A8架构的一系列开发板,详细讲解Linux的应用开发。

  r8 s# b0 q' h1 u, a
4.tl_can_echo案例
  • 案例功能
      b& E9 @7 K  J! I
本案例使用canutils工具包的canecho程序,实现CAN接口数据接收并重发功能。
canutils工具包内含5个独立的程序,分别为canconfig、candump、canecho、cansend、cansequence。各程序功能简述如下:
  • canconfig:用于配置CAN接口参数,比如波特率、模式等。
  • candump:从CAN接口接收数据并以十六进制形式打印到标准输出,亦可输出到指定文件。
  • canecho:从CAN接口接收数据,并将接收到的数据对外发送。
  • cansend:向指定CAN接口发送数据。
  • cansequence:向指定CAN接口发送自动重复递增数字,或指定接收模式并校验接收的递增数字。
    0 r6 c8 F1 ~* G  h+ D3 T( i" R
本案例仅使用canecho功能,如需实现其他功能,可自行下载canutils工具包并从中获取对应功能程序源码。
程序流程如下图所示:

% P/ D4 o/ N  b) s
图 25
2.操作说明
使用USB转CAN模块连接评估板CAN0接口和PC机USB接口,如下图所示。
( n) N" k1 g( v
图 26
参照调试工具安装文档安装USB转CAN驱动和ECAN Tools调试软件,双击打开ECAN Tools软件,选择设备类型,然后点击“打开设备”。

: y- M: ~# @& w+ ~& i7 s
图 27
打开ECAN Tools,界面如下图所示。
& M( l- E$ L3 A# O1 E  p
图 28
进入评估板文件系统,使用文件系统自带的canconfig工具设置波特率,并启动CAN0接口。
Target# canconfig can0 stop
Target# canconfig can0 bitrate 125000
Target# canconfig can0 start
! r6 T( w1 r) d8 Z7 u0 |) V
图 29
将本案例bin目录下的可执行程序tl_can_echo复制到评估板文件系统,进入可执行程序所在目录,执行如下命令查看程序参数信息。
Target# ./tl_can_echo -help
8 [( }+ \% U' [9 U3 h
图 30
执行如下命令绑定CAN0接口,并接收由ECAN Tools发出的数据,然后将接收到的数据重新发送出去。在ECAN Tools中输入数据并点击发送按钮,可看到有两帧数据,一帧是发送数据,另一帧是接收数据。
Target# ./tl_can_echo -v can0
& \$ g- f% l; w+ J4 i* M: X
图 31
/ L' P- N1 j" ?6 H" y1 b6 H9 I+ I
图 32
可按"Ctrl+Z"暂停程序,并执行如下命令退出程序。
Target# killall -9 tl_can_echo
7 M4 L% a" n. [: O
图 33
3.关键代码
  • 使用socket监听CAN接口。, R; \/ B# G: B) Q4 ~  ?
8 L! K- ]2 |+ e: @1 N2 n" t
图 34
  • 将从CAN接口接收到的数据重新发送出去。$ s0 b; P6 }& f& v% n. }

+ D+ [; A% N2 @/ a+ y) A7 ?5 q
图 35
5.tl_devmem_rw案例
  • 案例功能  q4 {& B5 ~' n4 n
本案例主要实现对内存设备进行数据读写操作,同时测试数据正确性和读写速度。
程序支持test、read、write三种测试模式,使用mmap对物理地址进行转换,可根据指定的访问操作类型按字节(Byte)、按半字(Halfword)进行访问。
2.操作说明
将本案例bin目录下的可执行程序tl_devmem_rw复制到评估板文件系统,进入可执行程序所在目录,执行如下命令查看程序参数信息。
Target# ./tl_devmem_rw -h

, v/ s% J! |. f  D0 Z
图 36
请执行如下命令进行读写测试。此命令写入1MByte大小的随机数据指定地址并将写入的数据重新读出,测试数据正确性和读写速度。
Target# ./tl_devmem_rw -t -a 0x90000000 -s 1048576 -o halfword

/ O4 S6 ]8 }7 L3 X* G: i  _
图 37
请新建一个test.txt文件,并输入任意内容(比如十六进制符0到f),同时执行如下命令进行写测试。此命令将test.txt文件中的16Byte数据写到指定地址。
Target# ./tl_devmem_rw -w -a 0x90000000 -s 16 -o halfword -f test.txt
2 D% S# F* [2 v0 L; S
图 38
请执行如下命令进行读测试。此命令从指定地址读取16Byte的数据,并将内容打印(下图对应的值为十六进制符号0到f的ASCII码)
Target# ./tl_devmem_rw -r -a 0x90000000 -s 16 -o halfword

5 K( I" @# R$ f" m( M2 b% z
图 39
3.关键代码
  • 把设备物理地址映射到虚拟地址。
    9 i; n9 j  l, n6 D8 \5 k# V

/ W+ a- e8 L5 J
图 40
2.根据指定的操作方式进行数据读取。

# n1 m8 n7 C$ s* \! }
图 41
3.根据指定的操作方式进行数据写入。

2 f6 j/ _" G7 ~, m+ N4 v. |
图 42
6.tcp_udp_demos案例
  • 案例功能# j0 \1 U2 N/ r. P
本案例主要实现客户端(client)与服务端(server)的文本数据相互收发功能。本案例包含4个程序:
  • tl_tcp_server:TCP服务端测试程序。
  • tl_tcp_client:TCP客户端测试程序。
  • tl_udp_server:UDP服务端测试程序。
  • tl_udp_client:UDP客户端测试程序。
    1 x# S3 j5 i' b) m0 G/ q/ o% f
程序流程如下图所示:

, |* @6 o2 |. F  n" Y+ n8 a" O3 o
图 43 TCP通信

5 ~& }7 m" S& C0 b
图 44 UDP通信
服务端和客户端程序均可在评估板、PC机Ubuntu系统上运行。当服务端与客户端程序均在评估板上运行时,可通过127.0.0.1进行本地回环测试,无需经过路由器。为方便测试,本章节采用评估板本地回环测试,bin目录下的4个文件均为ARM端可执行程序。
2.操作说明
将本案例bin目录下的4个可执行程序复制到评估板文件系统。
在Ubuntu中执行如下命令使用OpenSSH登陆评估板文件系统,如下图所示。
Host# sudo ssh root@192.168.0.83 //192.168.0.83为评估板IP,请根据实际情况修改
" w" s) j) A0 C
图 45
  • TCP通信测试; E$ e8 i/ C4 N; B3 i
在可执行程序所在目录执行如下命令运行TCP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。
Target# ./tl_tcp_server 2233 //TCP服务端命令
Target# ./tl_tcp_client 127.0.0.1 2233 //TCP客户端命令
程序执行后,客户端将会连接服务端。在服务端输入字符串"Tronlong",按下回车键即可在客户端显示对应内容。在客户端输入字符串"Hello Tronlong",按下回车键即可在服务端显示对应内容,如下图所示。

! [3 j0 |) V# Z- z
图 46 TCP服务端

" U$ C  E) E( K' c
图 47 TCP客户端
UDP通信测试
在可执行程序所在目录执行如下命令运行UDP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。
Target# ./tl_udp_server 2233 //UDP服务端命令
Target# ./tl_udp_client 127.0.0.1 2233 //UDP客户端命令
程序执行后,客户端将不会连接服务端。服务端在收到客户端信息前无法得知客户端的存在,因此需要客户端先向服务端发送信息。
在客户端输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端输入字符串"Hello Tronlong",按下回车键即可在客户端显示对应内容,如下图所示。
- ]! ^" ?3 r# w5 h# L
图 48 UDP客户端
! D( N4 X) v  i
图 49 UDP服务端
如需在PC端Ubuntu系统运行服务端或客户端程序,请将案例src源码目录拷贝到Ubuntu工作目录。进入源码目录后执行make命令,即可在当前目录下生成x86端可执行程序。在不同终端运行服务端或客户端程序的命令类似,但127.0.0.1需使用服务器IP地址替代。
Host# make
- e8 h: v5 i' ?) F
图 50
3.关键代码
以TCP通信程序为例。
1.tl_tcp_client.c
注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv等数据结构和系统调用的使用。
2.tl_tcp_server.c
注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv、bind、listen、accept等数据结构和系统调用的使用。
由于开发案例篇幅过长,给大家分为多个版本,今天先讲tl_can_echo案例、tl_devmem_rw案例、tcp_udp_demos。感兴趣的朋友,欢迎在评论区留言和我探讨!

2 V  ?$ q% |! d& |! G0 c# {% ^0 Y$ A1 B, M; _% J9 X" c" z# f) Z

该用户从未签到

2#
发表于 2021-9-1 17:36 | 只看该作者
实现CAN接口数据接收并重发功能
3 v9 R! q3 [; V5 t: i
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 02:43 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表