第7章 第2部分 CAN总线_第1页
第7章 第2部分 CAN总线_第2页
第7章 第2部分 CAN总线_第3页
第7章 第2部分 CAN总线_第4页
第7章 第2部分 CAN总线_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第七章之第4节CAN总线原理及实验主要内容:了解SPI总线的原理,掌握通过SPI总线访问器件的方法掌握CAN总线通讯原理学习CAN总线控制器MCP2510驱动的开发实验部分内容1、添加CAN总线驱动的write操作,实现CAN数据自回环模式的收发。2、修改应用程序,实现两台CAN总线之间数据的收发。SPISPI ( Serial Peripheral Interface) SPI总线概述 SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。 SPI主

2、要特点有: 可以同时发出和接收串行数据; 可以当作主机或从机工作; 提供频率可编程时钟; 发送结束中断标志; 写冲突保护; 总线竞争保护等。SPISPI ( Serial Peripheral Interface)SPI的四种传输数据的四种模式: 根据时钟的极性和相位的不同工作于四种模式CPOL: 时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平。 若 CPOL 被设为 1, 那么该设备在空闲时 SCK 管脚下的时钟信号为高电平. 当 CPOL 被设为 0 时则正好相反。CPHA: 时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时

3、钟信号变为下降沿时触发数据采样。 若 CPHA 被设置为 1, 则 SPI 设备在时钟信号变为下降沿时触发数据采样, 在上升沿时发送数据。 当 CPHA 被设为 0 时也正好相反。SPISPI ( Serial Peripheral Interface)SPI工作模式 查询模式 中断模式 DMA模式SPISPI ( Serial Peripheral Interface) S3C2410 x 的SPI模块SPI相关的寄存器功能介绍;SPCON0 -SMOD/选择SPI的工作模式:查询、中断、DMA -ENSCK/输出CLK使能控制位 -MSTR/主从方式选择 -CPOL/时钟极性选择 -CPH

4、A/相位选择 -TAGD/(?)SPSTA0 -DCOL/数据冲突检测 -MULF/多主模式检测 -REDY/发送或接受准备就绪标志位,SPTDATn可以读写标志位SPPIN0/SPI管脚控制寄存器SPPRE0/SPI传输速率控制寄存器SPTDAT0/从模式下发送数据寄存器 主模式下反SPRDAT0/从模式下接受数据寄存器 .SPISPI ( Serial Peripheral Interface) 设置SPI接口参考以下步骤: 1、设置SPI的波特率(对应的波特率控制寄存器SPPREn) 2、设置SPI控制寄存器(SPCONn),配置SPI的工作模式 3、如果要初始化MMC或者SD CARD

5、,则要写入数据OxFF到寄存器SPIDATn十次 4、启动MMC或者SD CARD,要设置nSS对应的GPIO为低电平 5、发送数据时,首先检测REDY是否为1,然后在写数据到SPTDATn 6、读数据方式一:SPCONn的控制位TAGD = 0/normal mode时,先写数据0 xFF到寄存器SPTDATn, 然后再检测传输就标志位REDY是否为1,在读取数据到本地缓存; 7、读数据方式二:SPCONn的控制位TAGD = 1/Tx Auto Garbage Data mode时 检测传输就标志位REDY是否为1,在读取数据到本地缓存 8、设置nSS对应的GPIO为高电平,关闭MMC或者

6、SD CARD;SPISPI ( Serial Peripheral Interface)SPI读写数据的检测 当写入数据时:REDY时钟是零,写入完成之后赋值为1 例:SPTDAT0 = val; /写数据到发送数据寄存器while (!(SPSTA0 & 1); /等待发送全部完成SPISPI ( Serial Peripheral Interface)SPI初始化 初始化SPI连接外部设备的端口 /初始化与SPI相关的三个GPIO /PIMISO SPIMOSI SPICLK set_gpio_ctrl (GPIO_TC_SPIMISO); set_gpio_ctrl (GPIO

7、_TC_SPIMOSI); set_gpio_ctrl (GPIO_TC_SPICLK);注:关于GPIO的设置在后面详细介绍SPISPI ( Serial Peripheral Interface)SPI初始化 设置传递模式 设置工作模式 设置波特率 设置时钟/设置SPI的工作模式为查询模式/开通外部时钟使能/设置主从模式为主模式/设置时钟脉冲极性为高电平/设置时钟脉冲相位为模式A(上升沿)/设置时钟分频参数为40 PCLK/2/(40+1) =Baud rateSPISPI ( Serial Peripheral Interface) SPI读写数据(8位数据) 读操作 inline st

8、atic char SPIRecv ( int channel ) if (channel = 0)return SPRDAT0;else if (channel = 1) return SPRDAT1;elsereturn -1; SPISPI ( Serial Peripheral Interface) 写操作 inline static void SPISend ( unsigned char val, int channel ) int flags;local_irq_save(flags);if ( channel = 0 )SPTDAT0 = val;while (!(SPSTA0

9、 & 1);/等待写入全部完成else if ( channel = 1 )SPTDAT1 = val;while (!(SPSTA1 & 1);local_irq_restore(flags); CAN总线的原理 CAN全称为Controller Area Network,即控制器局域网,是国际上应用最广泛的现场总线之一。 最初CAN总线被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如,发动机管理系统、变速箱控制器、仪表装备、电子主干系统中均嵌入CAN控制装置。ECU(Electronic Control Unit):电子

10、控制单元,又称“行车电脑”、“车载电脑”等 CAN总线的原理CAN的主要优点包括: 低成本 极高的总线利用率 很远的数据传输距离(长达10公里) 高速的数据传输速率(高达1Mbit/s) 可根据报文的ID决定接收或屏蔽该报文 可靠的错误处理和检错机制 发送的信息遭到破坏后可自动重发 节点在错误严重的情况下具有自动退出总线的功能 报文不包含源地址或目标地址仅用标志符来指示功能信息优先级信CAN总线的原理 一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制例如,当使用TJA1050作为CAN 收发器时,同一网络中允许挂接110个节点。 CAN

11、总线的电气特征 物理介质, “显性” 和“隐性”CAN能够使用多种物理介质进行传输,例如:双绞线、光纤等。最常用的就是双绞线。信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L,静态时均是2.5V左右,此时状态表示为逻辑1也可以叫做“隐性”。用CAN_H比CAN_L高表示逻辑0,称为“显性”。 CAN总线的原理CAN总线的MAC帧结构 CAN总线的原理 典型系统实现方法节点控制器-S3C2410微处理器,CAN控制器-MCP2510、 MCP2515芯片,CAN收发器-TJA1050、 TJA1040芯片。CAN总线的原理CAN总线控制器MCP2510 支持标准格式和扩展格式的CAN

12、数据帧结构 0-8字节的有效数据长度,支持远程帧 最大1Mbps的可编程波特率 两个支持过滤器(Fliter、Mask)的接收缓冲区,三个发送缓冲区 支持回环(Loop Back)模式 SPI高速串行总线,最大5MHz(4.5V供电) 3V到5.5V供电CAN总线的原理名称 管脚 描述 实际接法 TXCAN 1 连接到 CAN 的发送输出引脚 接 TJA1050 的 TXD 引脚 RXCAN 2 连接到 CAN 的接收输入引脚 接 TJA1050 的 RXD 引脚 OCS2 8 振荡器输出 接 16MHZ 的晶振 OCS1 9 振荡器输入 接 16MHZ 的晶振 Vss 10 逻辑和 I/O

13、引脚的参考地端 接地 INT 13 中断输出引脚 接 EINT4 引脚 SCK 14 SPI 接口时钟输入引脚 接 CPU 的 SPCK 引脚 SI 16 SPI 接口数据输入引脚 接 CPU 的 MOSI 引脚 SO 17 SPI 接口输入输出引脚 接 CPU 的 MISO 脚 CS 18 SPI 接口片选输入引脚 接 CPU 的 GPH0 引脚 RESET 19 低电平有效,复位输入引脚 接 CPU 的 nRESET 引脚 VDD 20 逻辑和 I/O 引脚的正电源 接 5V 电压 MCP2510芯片CAN总线的原理芯片内部功能结构CAN总线的原理CAN模块原理图CAN总线的原理 MCP2

14、510的控制字 命令命令格式格式定义定义复位1100 0000设置内部寄存器为默认值,并设置MCP2510到配置状态读取0000 0011从选定的寄存器的地址开始读取数据写入0000 0010向选定的寄存器的地址开始写入数据发送请求1000 0nnn设置一个或者多个发送请求位,发送缓冲区中的数据读取状态1010 0000轮流检测发送或者接收的状态修改位0000 0101按位修改寄存器CAN总线的原理典型时序读取命令 CAN总线的原理典型时序单字节写入命令 CAN总线的原理 波特率的设置: 通过设置MCP2510中的CNF1、CNF2、CNF3三个寄存器,实现不同时钟下,CAN总线通讯的波特率的

15、设置。在本实验平台中,MCP2510的输入时钟为16MHz。 相位1与相位2以采样点分割CAN波特率波特率同步段同步段传输段传输段相位相位1相位相位2CNF1CNF2CNF3125Kpbs17440 x030 x9E0 x03250Kpbs17440 x010 x9E0 x03500Kpbs17440 x000 x9E0 x031Mbps13220 x000 x9E0 x03实验内容1、在驱动模块中添加write接口,实现can总线发送数据功能2、参考main.c程序,编写系统的应用程序,实现读取的功能。3、修改Mikefile文件,编译应用程序代码分析应用程序接口(API)驱动程序提供给用户

16、应用程序的接口 write,/发送 read,/接收 ioctl,/其他操作 open,/打开设备 release:,/关闭设备分析应用程序代码:代码分析驱动程序驱动程序实现: static struct file_operations s3c2410_fops = owner:THIS_MODULE,write: s3c2410_mcp2510_write,read: s3c2410_mcp2510_read,ioctl:s3c2410_mcp2510_ioctl,open: s3c2410_mcp2510_open,release:s3c2410_mcp2510_release, ;代码分

17、析MCP2510驱动框架代码分析 MCP2510的初始化: MCP2510的初始化如下步骤: 软件复位,进入配置模式 设置CAN总线波特率 关闭中断 设置ID过滤器 切换MCP2510到正常状态(Normal) 清空接受和发送缓冲区 开启接收缓冲区,开启中断(可选)代码分析代码分析 CanData数据结构 typedef struct unsigned int id;/CAN总线IDunsigned char data8;/CAN总线数据unsigned char dlc;/数据长度int IsExt; /是否是扩展帧int rxRTR;/是否是远程帧CanData, *PCanData;代码

18、分析MCP2510 Write操作1、在local处理器上关闭中断2、MCP2510片选ENABLE3、CAN总线单字节写入操作4、 MCP2510片选DISABLE5、 打开中断代码分析MCP2510 Write操作在local处理器上关闭/打开中断操作:local_irq_save(flags);local_irq_restore(flags);代码分析MCP2510 Write操作CAN总线单字节写入操作 1、SPI总线发送数据函数: SendSIOData()/一个封装函数 2、发送单字节写入命令:0 x10 3、发送写入的地址 4、发送写入的内容代码分析MCP2510 Read操作s

19、tatic unsigned char MCP2510_Read(int address)unsigned char result;int flags;local_irq_save(flags);MCP2510_Enable();SendSIOData(MCP2510INSTR_READ);/发送读命令SendSIOData(unsigned char)address);/发送读取数据的地址SendSIOData(0);result=ReadSIOData();MCP2510_Disable();local_irq_restore(flags);return result;Can总线发送流程

20、1、在s3c2410_fops结构中添加写接口 2、用户程序使用CanData数据结构给驱动模块传递参数3、从用户空间读取待发送的内容 4、将用户空间传递的数据加以解析 5、MCP2510通过SPI接口与处理器传递数据 Can总线发送流程通过CanData结构发送数据:(1) 申请CanData大小的空间char sendbuffersizeof(CanData)(2) 判断只操作CanData大小的数据结构的情况(其他数量的字节报错返回)(3) copy数据从用户空间到内核空间中(4) 调用CAN总线发送数据函数(注意数据类型)MCP2510_canWrite();实验内容1、在驱动模块中添

21、加write接口,实现can总线发送数据功能2、参考main.c程序,编写系统的应用程序,实现读取的功能。3、修改Mikefile文件,编译应用程序代码分析用户程序调用驱动程序static void CanSendString(char *pstr) CanData data; int len=strlen(pstr); memset(&data,0,sizeof(CanData); data.id=0 x123; data.dlc=8; for(;lenMAX_CANDATALEN; len-=MAX_CANDATALEN) memcpy(data.data, pstr, 8);if

22、(write(can_fd,&data,sizeof(data)0) printf(write error!n); return ; pstr+=8; data.dlc=len; memcpy(data.data, pstr, len);if(write(can_fd,&data,sizeof(data)0) printf(write error!n); return ; 代码分析接收缓冲区数据结构typedef struct CanData MCP2510_CandataMCP2510_CanRevBuffer;/recieve data bufferint nCanRevp

23、os; /recieve buffer pos for queued eventsint nCanReadpos; /read buffer pos for queued eventsint loopbackmode;wait_queue_head_t wq;spinlock_t lock;Mcp2510_DEV;代码分析ioctl实现应用程序与驱动程序通信s3c2410_mcp2510_ioctl:UPCAN_IOCTRL_SETBANDUPCAN_IOCTRL_SETIDUPCAN_IOCTRL_SETLPBKUPCAN_IOCTRL_SETFILTERUPCAN_IOCTRL_PRINT

24、RIGISTER代码代码代码分析ioctl实现应用程序与驱动程序通信应用程序中调用ioctl方法实现参数传递:ioctl(can_fd, UPCAN_IOCTRL_PRINTRIGISTER, NULL);ioctl(can_fd, UPCAN_IOCTRL_SETID, id);#ifdef DEBUGioctl(can_fd, UPCAN_IOCTRL_SETLPBK, 1);#endif实验修改应用程序,实现两台CAN总线之间数据的收发S3C2410 x的I/O设置控制GPIO的控制寄存器: 包括:GPACON-GPHCON s3c2410的很多管脚都是复用的因此需要设置相应的控制寄存器

25、,来决定管脚的用途;GPxCON/端口配置寄存器GPxDAT/端口数据寄存器GPxUP/端口上拉控制寄存器S3C2410 x的I/O设置设置说明: 1、因为PORTA只用于输出,所以对应的控制寄存器只有,GPACON和GPADAT 2、另外还有一些端口设置寄存器: MISCCR /这个寄存器里包含了USB、时钟输出、上拉控制寄存器使能等多个控制位;比较复杂 EXTINTNx/控制外部中断输入请求的方式包括:高、低电平中断方式,上、下降沿中断方式和边沿中断方式; EINTMASK/外部中断屏蔽控制寄存器 EINTPENDx/还未知它是做什么用的(好象是未决什么的) GSTATUSx/普通io状态

26、寄存器访问linux的外部IO设备 CPU对外设IO端口物理地址的编址方式有两种: 一种是I/O映射方式(I/Omapped) 一种是内存映射方式(Memorymapped)。 访问I/O内存资源 映射I/O内存资源 读写I/O内存资源 注:关于linux的I/O管理内容很多,如果要详细讲解,请参考linux操作系统的教程访问linux的外部IO设备映射I/O内存资源 Linux在io.h头文件中声明了函数ioremap(),用来将I/O内存资源的物理地址映射到核心虚地址空间(3G4G) ioremap函数 /完成物理地址到内核虚拟地址的映射 iounmap函数 /取消映射访问linux的外部IO设备

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论