一,前言
近期在看arm内核相关手册才了解了axi总线,仅做外设驱动的时候根本不关心,所以感觉发现了新大陆,就继续深入学习下,看看有哪些点可以帮助到我。
二,axi总线协议
- axi总线其实是一种AMBA总线架构中的传输协议,有5路通道(读地址,读数据,写地址,写数据,写响应)发起者作为master节点,接收者作为slave节点,这里面包括了双向控制(valid和ready),而传输方式包括outstanding和burst(固定地址,递增地址,递增地址到上限后再从来),主从节点通信支持一对一,一对N,N对N,通过interconnect连接,根据主从机的拓扑结构,那么节点通信冲裁就有了不同的优先级算法。
-
而我最关心的是之前看到DFSR等cp15协处理器错误,里面描述是的SLVERR和DECERR是什么意思。那么通过了解axi协议,基本上就比较好理解这些内容了。
网上也找到了相关错误原因描述
SLVERR。slave error,用于已经成功到达slave,但slave希望返回error的场景。为了简化系统监控和调试,规范建议这种错误响应只用于错误条件,而不用于发送正常的、预期的事件的信号。比如:FIFO或buffer 溢出或运行不足的状态,尝试使用不受支持的传输大小,写入访问尝试进入只读位置,slave中的超时条件,访问一个禁用或关闭的功能
DECERR。译码错误,通常由一个连接组件返回,表示没有传输地址对应的slave。规范建议连接组件定义一个默认slave,由默认slave返回decerr 响应。AXI协议要求每次burst中的所有数据传输都必须完成,即使有error,所以,即使没有对应的slave,也要能完成传输,通过返回DECERR。
三,小结
突然发现协议其实也可以用code来实现,也可以用芯片来实现。要详细了解axi协议的人估计是芯片开发者,作为芯片使用者需要了解其设计原理,有利于排查bug,通过学习axi总线协议,我对内核错误信息理解的更加深入。学以致用,乐趣无穷。axi协议新大陆开发完毕,哈哈~