天嵌 ARM开发社区

 找回密码
 注册
查看: 3572|回复: 13

谁有TQ2440可用的CAN驱动程序

[复制链接]
foxrommel 发表于 2010-12-11 17:45:15 | 显示全部楼层 |阅读模式
在下重金求购!
最近在做CAN通信的课题,遇到了一些问题。开发板是TQ2440,Linux2.6.30,CAN控制器用的是MCP2510,现在驱动程序总调不出来,有做过的提供一份,或者能交流一下也好,感谢!
wiii 发表于 2010-12-12 22:20:16 | 显示全部楼层
1# foxrommel


我也是的,版主快点帮帮忙指导下
天嵌_support1 发表于 2010-12-13 16:31:28 | 显示全部楼层
本帖最后由 embedsky_lxt 于 2010-12-13 16:33 编辑

1# foxrommel


版主没有时间来测试了。
给你一个2410的开发详细例子,自己琢磨一下。
再把历程共享与大家。网友

在2410的基础上做2440的开发,差别不会太大。

本帖子中包含更多资源

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

x

评分

参与人数 1 +1 收起 理由
鱼头 + 1 赞一个!

查看全部评分

 楼主| foxrommel 发表于 2010-12-20 11:06:41 | 显示全部楼层
感谢版主。这个例子我大概看了,因为CAN控制器MCP2510用到SPI和ARM通信,所以该驱动实际上是SPI驱动加CAN驱动。
我有一问题不明白,如果板子内核在make menuconfig的时候设备驱动选项里并未选中SPI(天嵌默认的配置就是没选中),也就是内核本来不支持SPI的情况下,是不是也能直接把编译出的ko模块动态加载进系统并应用呢?
天嵌_support1 发表于 2010-12-20 14:45:13 | 显示全部楼层
4# foxrommel


是的,可以的,网友。
wiii 发表于 2010-12-30 23:25:23 | 显示全部楼层
谢谢!!!
 楼主| foxrommel 发表于 2011-1-4 14:04:36 | 显示全部楼层
请问有谁成功的在TQ2440上实现CAN驱动了吗?
版主提供的例子我经过修改后,编译出驱动模块加载到板子系统,但是调用时报错了,如下:
[root@EmbedSky /mnt]# ./can                                                     
CANx ID.                                                                        
Unable to handle kernel paging request at virtual address 0000e1bf              
pgd = c3ae8000                                                                  
[0000e1bf] *pgd=33b1b031, *pte=00000000, *ppte=00000000                        
Internal error: Oops: 13 [#2]                                                   
Modules linked in: candrv ov9650 zd1211rw rt73usb rt2x00usb rt2x00lib mac80211 v
CPU: 0    Tainted: G      D     (2.6.30.4-EmbedSky #13)                        
PC is at SPI_Init+0x3c/0xac [candrv]                                            
LR is at __arm_ioremap_pfn+0x280/0x328
...
大概是在SPI_Init这个函数出错了,也就是SPI初始化不成功。
想请问:这驱动是整合了SPI驱动和CAN驱动吗?因为我在module_init(mcpcan_init_module)入口处看到的mcpcan_init_module是通过res = register_chrdev(MCP_major,"MCPCAN",&Fops)来注册设备,这个设备是给CAN控制器准备的吧。但是在这之前,需要通过SPI完成CAN的初始化设置,也就是先有一个SPI驱动,那么SPI驱动的注册又在哪里呢?程序里没看到,是否也是失败的原因?
 楼主| foxrommel 发表于 2011-1-18 20:44:35 | 显示全部楼层
说一下最近的进展,驱动是由飞凌2440改的,2。6。12内核的,现在改到2。6。30下。执行测试程序结果如下:
can test start                                                                  
init mcp2510 over                                                               
state ok                                                                        
Open device success.                                                            
Please connect the CAN PORT with wire.CAN error with CANINTF = 0xff.            
MERRF:message error.                                                            
WAKIF:wake up interrupt.                                                        
ERRIF:CAN bus error interrupt.                                                  
EFLG = 0xff.                                                                    
TEC = 0xff.                                                                     
REC = 0xff.                                                                     
send datagram.                                                                  
the data sended is -CVTECH-.                                                   
Trying to free nonexistent resource <0000000059000000-0000000059000037>         
Trying to free nonexistent resource <0000000056000000-0000000056000093>         
Trying to free nonexistent resource <000000004c00000c-000000004c00000f>         
------------[ cut here ]------------                                            
WARNING: at kernel/irq/manage.c:735 __free_irq+0x114/0x1c0()                    
Trying to free already-free IRQ 20
...
data_receive.BufNo = 3                                                         
data_receive.IdType = 0                                                         
data_receive.id = 240                                                           
data_receive.DataLen = 14                                                      
data_receive.data = U[??sC LG`X
embedsky_lhh 发表于 2011-1-19 10:18:45 | 显示全部楼层
先测试SPI是否是好的,然后再看Can模块的电路,我以前也做过一个SIP驱动的CAN的程序,由于3.3V和5V没隔离的问题就影响了通讯,我也没搞清为什么会有这样的影响。如果SPI是好的,建议你分析下CAN模块和CAN芯片的情况,它的逻辑电平范围是什么?
 楼主| foxrommel 发表于 2011-2-23 15:59:27 | 显示全部楼层
感谢版主的解答。我把CAN控制器MCP2510和开发板使用了同一电源(3.3V)和地(之前CAN用了独立的5V电源),然后回环测试接收数据正确了~只是还会有警告信息出来,不知何故~
can test start                                                                  
init mcp2510 over                                                               
state ok                                                                        
Open device success.                                                            
send datagram.                                                                  
the data sended is abcd1234.                                                   
data_receive.BufNo = 3                                                         
data_receive.IdType = 0                                                         
data_receive.id = 23
dTrying to free nonexistent resource <0000000059000000-0000000059000037>        
Trying to free nonexistent resource <0000000056000000-0000000056000093>         
Trying to free nonexistent resource <000000004c00000c-000000004c00000f>         
------------[ cut here ]------------                                            
WARNING: at kernel/irq/manage.c:735 __free_irq+0x114/0x1c0()                    
Trying to free already-free IRQ 20                                             
Modules linked in: candrv ov9650 zd1211rw rt73usb rt2x00usb rt2x00lib mac80211 v
Backtrace:
...
---[ end trace eaef40f5fe83d0b7 ]---                                            
ata_receive.DataLen = 8                                                         
data_receive.data = abcd1234
亚瑟王 发表于 2012-2-3 16:50:15 | 显示全部楼层
亲,mcp2510是用SPI来接收和传输数据的。如果要使用内核自带的spi驱动,你需要配置上spi设备,然后在mach-tq2440.c中添加对spi的支持,最后直接在应用程序中实现can的操作(通过读写spi);
第二个办法:用IO口模拟SPI或者自己简单初始化SPI设备,然后实现SPI的读写之后,在驱动中实现can的操作,最多添加一个外部中断。
推荐使用第二种。
鱼头 发表于 2012-2-2 08:30:34 | 显示全部楼层
为么无法下载呢??:o:o
tsunghsin 发表于 2012-6-19 11:05:40 | 显示全部楼层
无法下载:'(:'(
秋天de誓言 发表于 2013-11-28 11:04:35 | 显示全部楼层
楼主,小弟最近也在弄CAN   不过是裸奔的   你这程序挂在组网上试过吗?   我的程序  单对单的时候   没问题    但是挂在组网上的时候   就出现掉帧(其中节点1 一直自动在给我发,我能收到;节点2是手动给我发,节点2的数据有时候就收不到。)你遇到这样的情况了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-5 18:24 , Processed in 1.027383 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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