打印

linux下SPI驱动疑问

[复制链接]
1630|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vkic007|  楼主 | 2015-11-6 13:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近我开发SPI驱动,但是这个SPI驱动对spi时序有一定的要求。我程序是这样的
        status =0;
        spi_message_init(&msg);
        buf_wdat[0] = 0x40|(((port-1)<<4)|reg);
        buf_wdat[1] = 0x00;
        buf_rdat[0] = 0x00;
        buf_rdat[1] = 0x00;
        index_xfer.tx_buf = buf_wdat;
        index_xfer.rx_buf =(void *) buf_rdat;
        spi_message_add_tail(&index_xfer, &msg);
                cs(0);
            status = spi_sync(spi, &msg);
                cs(1);
            udelay(5);
        if(status)
        {
         return status;
        }
        *dat = buf_rdat[1];

上面红色的地方,我觉得从CS(0),后到spi的时钟出来这段时间比较长,有50us,不知道哪位知不知道status = spi_sync(spi, &msg);这个启动慢,可以在什么地方修改。

相关帖子

沙发
wyg_031503| | 2015-11-13 15:50 | 只看该作者
你有没有做过SPI从设备驱动,我把板子改成从设备,收到数据始终是乱码,求教怎么弄。 从设备驱动是自己写的。
77 static int reg_init()
78 {
79 printk("Begin init...\n");
80 //设置GPIO
81 GPBCON &= 0XFFFF0000;
82 GPBCON |= 0X00002222;
83 //GPEUP 设置;全部disable
84 GPBUP &= ~(0xff << 0);
85 //GPBDAT 设置位0
86 GPBDAT &= ~(0xff << 0);
87 CLK_GATE_IP3 = (1 << 12);
88 CH_CFG0 = ((0<<6) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0));
89 //CLK_CFG0 |= (1<<9)|(0<<8);
90 MODE_CFG0 &= 0;
91 MODE_CFG0 = ((0x0 << 29) | (0x0 << 19) | (0x0 << 17) | (0 << 11) | (0 << 5) | (0 << 2) | (0 << 1) | (0 << 0)); //fifo 接收>    数据100字节,就产生中断
92 //CS_REG0 = 0x2;
93 SPI_INT_EN0 |= (1 << 1);//打开RXFIFO中断
94 return 0;

使用特权

评论回复
板凳
zhangbin_abc| | 2015-12-13 15:15 | 只看该作者
想请问楼主 linux下SPI驱动是怎么做的,我最近也在搞这个,一直没搞明白啊,求教!

使用特权

评论回复
地板
mini1986| | 2015-12-15 09:42 | 只看该作者
zhangbin_abc 发表于 2015-12-13 15:15
想请问楼主 linux下SPI驱动是怎么做的,我最近也在搞这个,一直没搞明白啊,求教! ...

看看spi的协议,如果是linux的话,配置io功能,注册个设备,上层搞个应用测试下......

使用特权

评论回复
5
zhangbin_abc| | 2015-12-15 10:16 | 只看该作者
本帖最后由 zhangbin_abc 于 2015-12-15 10:18 编辑

SPI的协议是知道的,而且以前在裸机上用GPIO模拟和微控制器内SPI控制器直接控制的方式都搞过,但是现在搞到linux驱动下感觉有点复杂化了,我最近要做的一个项目要加上这个驱动,所以一直在折腾。我在网上看到SPI的驱动涉及到platform总线、platform设备、SPI控制器、SPI驱动、SPI设备这五样,把我搞迷糊了,所以想请高手帮我指点一下,谢谢!@mini1986  

使用特权

评论回复
6
mini1986| | 2015-12-16 08:39 | 只看该作者
zhangbin_abc 发表于 2015-12-15 10:16
SPI的协议是知道的,而且以前在裸机上用GPIO模拟和微控制器内SPI控制器直接控制的方式都搞过,但是现在搞到 ...

我只用过master模式,platform这些东西,bsp里面都已经做好了,属于driver framework层的。你只需要配置下io复用,注册个spi设备就可以了,系统深层次的东西,不用你搞......

使用特权

评论回复
7
zhangbin_abc| | 2015-12-16 09:17 | 只看该作者
mini1986 发表于 2015-12-16 08:39
我只用过master模式,platform这些东西,bsp里面都已经做好了,属于driver framework层的。你只需要配置 ...

哦哦,我想也是这样的.我现在用的微控制器内部带SSP控制器,我想用这个,而不是用GPIO模拟的方式,那么我应该在哪里初始化与SSP控制器 相关的寄存器呢,还有一个问题我一直想不明白,我没有看到驱动程序中那里有对这些硬件寄存器的数据读取和写入。

使用特权

评论回复
8
mini1986| | 2015-12-16 09:28 | 只看该作者
zhangbin_abc 发表于 2015-12-16 09:17
哦哦,我想也是这样的.我现在用的微控制器内部带SSP控制器,我想用这个,而不是用GPIO模拟的方式,那么我 ...

看看源码,网上找找资料......

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

365

帖子

1

粉丝