rtthread下spi device架构MCP25625驱动

这篇具有很好参考价值的文章主要介绍了rtthread下spi device架构MCP25625驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.CAN驱动架构

由于采用了RTT的spi device架构,不能再随心所遇的编写CAN驱动 了,之前内核虽然采用了RTT内核,但是驱动并没有严格严格按RTT推荐的架构来做,这次不同了,上次是因为4个MCP25625挂在了4路独立的SPI总线上, 这次2个mcp25625挂在1个SPI总线上,同时此SPI总线上还挂载了1个铁电,1个norflash,且FM25V10我已经使用了spi device架构驱动起来了,说实话,用RTT的spi架构,还很方便,于是CAN驱动我也只能用spi架构。首先我遇到一个问题就是,怎么处理mcp25625中断,之前是在中断中操作spi总线接收数据的,但在官方spi架构下,这种方法行不通,因为在RTT中,不允许在中断中调用可能导致中断挂起的操作,比如申请信号量、互斥互斥量等,但spi架构的核心函数都要lock(spibus),这直接就导致系统死掉,其实我测试发现不但不能在中断处理函数中调用可能导致中断挂起操作,即使在RT_TIMER_FLAG_SOFT_TIMER定时器中这种操作也是被禁止的,因为我想设计1个50ms定时器,定时发送几个CAN帧,发现直接在超时处理函数中发送CAN帧是不行的,(程序直接打印的原因是timer线程优先级为0,在优先级为0 的线程是不被允许申请资源的!),于是我只能专门新建一个发送线程,超时处理函数向此线程发送邮箱,“发送线程”收到邮箱后,触发发送动作。 接收线程也是类似这样的操作,在mcp25625的中断处理函数中只发送邮箱,而在设置了高优先级的接收线程内收到邮箱信息后, 开启接收CAN帧动作。经过2天的调试,基本可以实现MCP25625驱动。

2, mcp25625,不连接CAN总线时,发送死循环

OSM单次触发,CAN正常情况下,如果 发送不成功的话,会一直尝试发送,直到发送成功,但是也可以设置发1次,就需要使能此位(正常情况禁止)

rtthread下spi device架构MCP25625驱动,MCP25625,SPI框架,rtthread

这个与USB上的HOST会自动再发IN Token,非常像,总线上不回应数据,就一直询问,这2个地方都是发送之后会产生1个中断,造成系统一直在中断、中断处理死循环,其它任务得不到执行。

解决办法也不一样,

对于MERR中断, 直接关闭MERR中断使能,因为在中断处理函数中,MERR中断处理非常简单,就是清了一下中断标志,禁止MERR中断也没有什么影响,

对于USB IN taken产生NACK中断, 只能减少中断次数, 设置为1ms中断1次,也能解决问题。

3, mcp25625接收丢数据

因为RTTHREAD效率问题,也不好改,而且用的是倍受争议的SPI HAL库,同中接收数据不在中断中了,在线程中,这就导致了老是丢CAN数据了 ,试过了很多方法,也没解决,包括,提高接收线程的优先级,提高了6, 仅次于timer系统记数器优先级,结果还是不能,最终通过提高SPI时钟频率解决,因为SPI总线经连通了核心板与底板,上面又挂了很多外设,之前设置的是5Mhz,直接提高到10Mhz,测试SPI总线正常,收发数据正常,CAN也没再丢数据,先这个办了。

rtthread下spi device架构MCP25625驱动,MCP25625,SPI框架,rtthread

4,接收溢出

之前CAN接收缓冲区只使能了1个,这个在线程中接收CAN帧,必须使能2个CAN缓冲区了, 就这还老是接收溢出,这次驱动改变比较大。文章来源地址https://www.toymoban.com/news/detail-697351.html

到了这里,关于rtthread下spi device架构MCP25625驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Linux内核驱动】SPI子系统 | 硬件原理 | 应用编程 | 内核驱动 | 总体框架

    1.1 SPI通信协议 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步,全双工 支持总线挂载多设备(一主多从) 1.2 硬件连接 多NSS独立片选方式 菊花

    2024年02月16日
    浏览(48)
  • uboot下UCLASS框架详解---结合项目工作中spi master和flash驱动开发

    本文通过如何通过编写特定板子的spi master驱动从而识别到spi norflash设备,完成norflash设备的读写。 2.1 uclass uclass可以理解为一些具有相同属性的udevice对外操作的接口,uclass的驱动是uclass_driver,主要为上层提供接口。 udevice的是指具体设备的抽象,对应驱动是driver,driver主要负

    2024年02月07日
    浏览(32)
  • 【ZYNQ】SPI 简介及 EMIO 模拟 SPI 驱动示例

    SPI 是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,是一种高速、全双工、同步通信总线,可以在同一时间发送和接收数据,SPI没有定义速度限制,通常能达到甚至超过10M/bps。 SPI 有主、从两种模式,通常由

    2024年02月07日
    浏览(30)
  • 【STM32篇】SPI时序驱动W25Q64(硬件SPI和模拟SPI)

            由于MCU的FLASH空间有限,在特殊使用场所中会存在FLASH存储不够使用的情况。例如上篇中驱动LCD屏,需要将一个中文字库保存到MCU的FLASH中是不太现实的(STM32F103ZET6内部FLASH大小512KB),为此可使用外部FLASH作为拓展。         W25Q64(64Mbit)是为系统提供一个最小的空

    2024年02月08日
    浏览(39)
  • Linux设备驱动之SPI驱动

    Linux下SPI驱动分成两部分:主机驱动和设备驱动。 主机驱动:         主机侧SPI控制器使用 struct spi_master 描述,该结构体中包含了SPI控制器的序号(很多SoC中存在多个SPI控制器),片选数量,SPI信息传输的速率,配置SPI模式的函数指针(4种模式),实现数据传输的函数指针

    2023年04月11日
    浏览(42)
  • Linux SPI 驱动

    Linux 内核将 SPI 驱动分为两部分: SPI 总线驱动 : SOC 的 SPI 控制器驱动,也叫做 SPI 适配器驱动。一旦编写完成就不再需要再做修改,其他的SPI 设备直接调用主机驱动提供的API 函数完成读写操作即可。 SPI 设备驱动 :SPI 设备驱动就是针对具体的SPI 设备而编写的驱动。 Linux 内

    2023年04月18日
    浏览(22)
  • FPGA SPI 驱动程序

    此驱动程序已经完成很久了,花了2个星期的时间,主要是提升程序运行的效率。最近整理文件的时候又看到了,记录一下。 (1)状态控制程序 其主要是以空状态,写状态,读状态三个状态顺序执行的。 (2)写命令程序部分 (3)读数据程序部分

    2024年02月10日
    浏览(32)
  • Linux 下spi设备驱动

    参考: Linux kernel 有关 spi 设备树参数解析 - 走看看 Linux SPI驱动框架(1)——核心层_linux spi驱动模型_绍兴小贵宁的博客-CSDN博客 Linux SPI驱动框架(2)——控制器驱动层_全志h3 spi驱动_绍兴小贵宁的博客-CSDN博客 Linux SPI驱动框架(3)——设备驱动层_linux spi字符设备驱动_绍兴小贵宁的

    2024年02月09日
    浏览(25)
  • stm32 hal库硬件spi(软件spi)驱动1.8寸tft—lcd屏幕

    屏幕是嵌入式开发中的一个重要的部分,cdsn上有许多解释原理的,还有很多是采用正点原子的屏幕来驱动的,对于刚刚入门不久的我们可能没有资金去购买较为昂贵的屏幕。而对于底层原理我们暂时也不必了解的那么深入,能点亮屏幕就是我们最大的快乐。 除了中景园的资

    2024年02月03日
    浏览(41)
  • linux的SPI设备驱动程序

            串行外设接口(SPI)是四线总线:MOSI、MISO、串行时钟SCK和片选CS。它常用于连接闪存、AD/DA转换器。主设备生成时钟和管理片选CS,速度可达80MB,远超I2C总线。         SPI设备在内核中表示为struct spi_device{},管理他们的驱动程序的实例是struct spi_driver{}。spi的拓扑结构

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包