12月份,英创对现主要销售的产品EM928X、EM335X、ESM335X系列工控主板的CAN驱动做了一次较大升级。主要目的是修复原有BUG,同时优化部分逻辑,使得使用起来更加方便。
优化内容
1、修复了原驱动打开过滤器后一个可能导致接收丢包的BUG
EM335X及ESM335X系列主板在打开过滤器后,CAN接收单元过少,在高速收发时可能因为来不及收发导致丢包。新驱动修改了该部分逻辑,同时定义过滤器最大数为4个。新的过滤器设置说明请参考附录《英创新CAN驱动接口调用方法及说明》过滤器设置一节。
2、增加一套新的接口函数
1)新的接口更加简洁清晰,使用起来更加方便。详细请参考附录《英创新CAN驱动接口调用方法及说明》。
2)使用统一标准,英创公司计划在之后推出的产品也采用该标准,方便客户在升级更换平台时移植起来更加方便。
3)完全兼容老驱动。新驱动保留了老驱动所有接口。升级之后,之前开发的CAN应用程序可以继续照常使用。
3、增加对CAN总线错误自动复位功能,修改了CAN总线错误处理逻辑结构
原驱动在CAN总线出错后会上报事件通知上层应用程序,同时挂起等待上层应用程序处理完错误事件后手动复位CAN总线。在等待期间,无法进行CAN的收发工作。
图 原驱动总线错误处理流程
新驱动考虑到,实际应用中用户更希望在CAN错误排除后,能够尽快恢复通信。大部分时候并不需要停下来等待CAN错误处理完毕。所以新驱动在CAN总线出错后会自动检查恢复CAN总线。
图 新驱动总线错误处理流程
4、修改CAN总线错误处理模式
原驱动需要单独获取CAN错误事件,然后再通过接口查询错误类型,再决定处理方式。新驱动做优化修改了处理模式,使得使用起来更灵活方便。
图 原驱动CAN总线错误处理模式
新驱动CAN总线错误信息改为通过帧形式上报,用户可以通过注册表[HKEY_LOCAL_MACHINEDriversBuiltinCAN1]中BusErrorReport项设置是否需要接收错误帧,默认不接收。
图 新驱动CAN总线错误处理模式
错误帧详细定义见附录《CAN错误帧定义》。
5、修改发送逻辑
原驱动发送指令只是将需要发送的数据帧放入发送BUFFER区,只要BUFFER区未满均返回成功,但是不代表实际发送成功。
原CAN驱动会自动检查发送BUFFER区里未发送的CAN包并尝试发送,对未发送成功的CAN包会自动重发,直到发送成功。
在CAN数据线断开时,CAN发送指令会返回TRUE,但实际数据仍存在发送BUFFER中并未发送出去。当CAN数据线重新连接后,BUFFER中的数据才得以发送。
图 原驱动CAN发送流程
新驱动发送函数为阻塞函数,超时时间默认为1000ms,可以设置注册表[HKEY_LOCAL_MACHINEDriversBuiltInCAN1]中TxTimeout项修改该时间长短。返回值为实际发送是否成功的逻辑值。
当CAN总线错误,发送失败后,CAN驱动不会自动重发CAN包,所以需要应用层自行判断是否重发。
图 新驱动CAN发送流程
6、增加CAN接收BUFFER到8K,可以缓存更多CAN包
附录
《英创新CAN驱动接口调用方法及说明》
《CAN错误帧定义》
成都英创信息技术有限公司
http://www.emtronix.com
更多回帖