命令仲裁
有四个Flash访问命令源:
1.AHB命令,被AHB写 SFM空间触发
2.AHB命令,被AHB读SFM空间触发
3.IP Command ,被写IPCMD[TRG]触发
4.挂起命令(被挂起的AHB预读取序列)
注意:
AHB BUS访问不会同时被写和读命令触发
AHB预读取序列是一种当AHB 预读取使能时被AHB 读访问触发的命令序列。在所有数据被AHB 读取后,FlexSPI会预读取更多数据来缩减下次读取的延迟。读取的AHB命令在为当前的AHB读取突发读取数据时不会中止。但是在预取数据时,AHB读命令可以被任何新的IP命令或AHB命令请求中止(不是为当前读突发)。
当仲裁程序空闲状态时,这4个命令源被授予的优先级如下(STS0[ARBIDLE]=1):
1. AHB命令(读/写)
2. IP命令
3.暂停命令
请注意:当仲裁员空闲且没有AHB/IP命令请求时,暂停命令不会立即被授予。仲裁员将等待n个 AHB时钟周期空闲状态,然后恢复暂停命令(n是寄存器字段值MCR2[RESUMEWAIT])。这样做是为了避免AHB预取序列被频繁地恢复和挂起。
如果仲裁员忙于执行AHB/IP命令(不是suspended命令),则不授予所有命令请求,如果授予超时,则会出现AHB/IP命令授予错误。当仲裁员执行AHB读预取序列时,如果出现新的AHB/IP命令请求,AHB读预取序列将中止(但不是立即中止)。仲裁程序将授予AHB/IP命令请求后,AHB读预取序列被中止在FlexSPI接口并且保存所有内部数据指针。
27.5.11.1命令中止和暂停
本节描述命令中止和挂起机制。
1. 命令中止
正如上面提到的,如果出现新的AHB/IP命令请求,AHB读取预取序列可以被中止。
2. 命令暂停
当AHB读取预取序列在FlexSPI接口中止时,以下情况下FlexSPI将保存这个暂停序列,并且如果仲裁员空闲足够的时间,可以恢复这个序列:
没有有效的挂起命令(寄存器字段AHBSPNDSTS[ACTIVE]是0x0)。如果还没有挂起的命令,或者挂起的命令被恢复,也是可以的。
中止的AHB读预取序列比当前活动挂起序列具有更高的优先级。
请注意:原始的暂停序列将被忽略,永远不会被FlexSPI恢复。
3.暂停命令
当任何AHB预取命令中止和挂起时,suspended命令(内部状态)将变为活动的。在下列情况下,它会无效:
暂停命令由仲裁员恢复。
有一个新的AHB读取命令请求,它是由AHB master触发使用相同的AHB RX缓冲区(缓冲区ID)。
下面是一个指示命令中止/暂停/恢复流的示例: