dengmengcan 发表于 2018-3-21 20:00:12

嵌入式linux下,模拟SPI时序的不同实现方式会有什么影响?

    如图,在嵌入式linux系统中,需要实现模拟SPI时序,目前知道的有2种实现方法:1、在驱动层用IO口模拟实现SPI时序;2、在应用层用IO口模拟实现SPI时序。
    这两种方式都可以实现功能,但是不太明白会有什么差别,或者说哪一种实现方式不太好。网上看到有说法是模拟SPI时序应该用驱动层实现,在应用层实现SPI时序,
有可能会在写时序的过程中,进程或线程被系统调度,切换到其他的进程,这样可能会造成时序不对。在驱动层实现的话,linux对加载驱动后,read、write都不会被
操作系统的任务调度给中断。以上的说法在网上看到,不确定是不是正确的,有没有大神能够解释一下这两种实现方式的区别。

wenming 发表于 2018-3-21 20:12:51

肯定要用gpio驱动层模拟,Linux要现成的驱动,另外在应用层调用 ,系统开销太大了

dengmengcan 发表于 2018-3-21 20:46:49

wenming 发表于 2018-3-21 20:12
肯定要用gpio驱动层模拟,Linux要现成的驱动,另外在应用层调用 ,系统开销太大了 ...

目前是在应用层实现的,跑了挺久暂时没看到出问题,从系统开销来考虑,确实是开销会大一些,每次写时序的时候相当于一直在调用GPIO的驱动。

yick 发表于 2018-7-5 11:17:36

用gpio驱动层模拟

dengmengcan 发表于 2018-7-6 20:48:30

yick 发表于 2018-7-5 11:17
用gpio驱动层模拟

仍是在应用层实现,但是上电后之后初始化一次,不会再改变,因此没改动,暂时还没发现有影响

yick 发表于 2018-7-9 13:38:57

dengmengcan 发表于 2018-7-6 20:48
仍是在应用层实现,但是上电后之后初始化一次,不会再改变,因此没改动,暂时还没发现有影响 ...

你说的在应用层实现,可能是内核自带spi的驱动了,spi通信的应用程序当然是在应用层实现的,不过没问题就好。

wx-ta 发表于 2018-7-10 09:24:58

为何要模拟呢,芯片上没有硬件spi吗? 没有的话勇哥usb转spi也行吧

gyd0317 发表于 2018-7-10 09:59:30

应用层速率低

nibia 发表于 2018-7-10 10:57:34

可以用iomap映射,直接读写spi控制寄存器就可以了,
有没有大侠对比过,我觉得iomap会比 调用驱动的效率高。。。。。

gliet_su 发表于 2018-7-10 12:51:04

不什么影响,就是SPI速度有点慢,一般也够用了。

chenqi 发表于 2018-7-10 12:55:20

当应用程序较多的时候,就看出来差别了

皮尔斯 发表于 2018-7-10 13:58:08

越接近硬件,速度越快,优先级越高。像SPI这种底层驱动的时序要求又严格的不建议在应用层写。如果要求通讯速度快,就更不能在应用层写了
页: [1]
查看完整版本: 嵌入式linux下,模拟SPI时序的不同实现方式会有什么影响?