📄 can驱动说明.txt
字号:
/****************************************Copyright (c)**************************************************
** 西安傅立叶电子有限公司
** 研 发 部
** http://www.FFTChina.com
**-----------------------------------------文件信息-----------------------------------------------------
**文 件 名: cantest.c
**创 建 人:
**最后修改日期: 2005年6月30日
**描 述: CAN模块说明文挡
**说明 :该说明文挡的使用适合驱动程序中断模式和查询模式
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
can模块说明文挡
(1)硬件说明
注意:
1. 原版的CAN 原理图有两个错误
原图上:
u3(7:CANH) 接到 CON1(2)
u3(6:CANL) 接到 CON1(3)
u6(7:CANH) 接到 CON2(2)
u6(6:CANL) 接到 CON2(3)
更正为:
u3(7:CANH) 接到 CON1(3)
u3(6:CANL) 接到 CON1(2)
u6(7:CANH) 接到 CON2(3)
u6(6:CANL) 接到 CON2(2)
2.
系统的例子是两个CAN之间进行通讯,CAN2.OA标准协议
(2)包含文件
基于linux的CAN驱动(中断方式)CAN.C
SJA1000的配置文件 sja1000.h
9200的函数应用文件 9200.h
can应用程序 main.c
(3) 驱动程序以及应用程序的使用
驱动程序的编译 **注意用户交叉编译器路径和提供内核存放的路径
--/usr/local/arm/2.95.3/bin/arm-linux-gcc -O2 -DMODULE -D__KERNEL__ -I/usr/src/arm/linux-2.4.19-rmk7/include -c can.c
--chmod a+r+x can.o
应用程序的编译
--/usr/local/arm/2.95.3/bin/arm-linux-gcc -O2 -o main main.c
动态加载驱动模块
--insmod can.o
显示成功加载信息
--mknod /dev/fftcan c 254 0
运行
--./main
运行结果
Begin to test fftcan drivers
40 CAN1ID号的高八位
6
66 数据0的ASCII码值
66
74
63
61
6E
@.fftcan 数据的字符窜形式显示
finished FFT can test
(4)应用程序函数说明
1:ioctl(int fd,cmd,value);
ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就
是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数
如下:
int ioctl(int fd, ind cmd,value);
其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设
备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和
cmd的意义相关的。
本驱动中 :
CMD=3或者CMD=4,则传递进去的ffttemp为经过组合的ac,am,btr0,btr1值;
CMD=3表示对can0进行初始化 value参数为验收代码,验收屏蔽,总线定时寄存器0和1的值
CMD=4表示对CAN1进行初始化 value参数为验收代码,验收屏蔽,总线定时寄存器0和1的值
CMD=0表示查询通道0是否收到数据,value参数没有意义
CMD=1表示查询通道1是否收到数据,value参数没有意义
返回值:0:表示CAN0通道接收到数据
1:表示CAN1通道接收到数据
3:表示CAN0初始化成功
4:表示CAN1初始化成功
2:write(fd1,bufdat,1);
原形:int write(int handle,char *buf,unsigned len)
用法:write(文件句柄,缓冲区地址,缓冲区字节长度<最大65534>);
功能:将缓冲区的数据写入与handle相联的文件或设备中,handle是从creat、open、dup或dup2调用中得到的文件句柄。对于磁盘或磁盘文件,写操作从当前文件指针处开始,对于用O_APPEND选项打开的文件,写数据之前,文件指针指向EOF;对于设备,字节被直接传送到设备中;
返回值:实际写入的字节数(不包括回车符),出错时返回-1。
头文件:io.h
本驱动中:
fd就是用户程序打开设备时使用open函数返回的文件标示符
buf表示要写入的数据数组起始地址
len参数表示要写入的CAN通道号
本函数用来向CAN总线发送数据
3:read(fd1,0,bufdat);
read()读文件函数
原形:int read(int handle,void *buf,unsigned len)
功能:从与handle(从creat、open、dup或dup2调用中得到的句柄)相联的文件中读取len字节到由buf所指的缓冲区中。对于以文本方式打开的文件,read删除读入数据中的回车符。当读到Ctrl-Z字符时返回文件结束。对于磁盘文件,read从当前文件指针处开始读取数据。在读操作完成后,文件指针增量为读入的字节数。对于设备,直接从设备中读字节。
返回值:读入缓冲区的字节数,如果文件以文本方式打开,则不包括回车符和Ctrl-Z字符。
头文件:io.h
本驱动中:
fd就是用户程序打开设备时使用open函数返回的文件标示符
buf参数存放接收到的数据值,注意:接收到的数据为接收缓冲区里面的全部内容,包括了接收到的ID号和数据位等信息;
len在这里没有用
***:注意:在本驱动程序中,没有加软件缓冲区,即一个循环存储数据区域;在实际应用中,应加上一个软件缓冲区,这样可以保证数据在频繁传输的情况下不会丢失;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -