NUC970的SPI寄存器足够简单,但是没有DMA支持有点遗憾,现在SPI也算高速设备了,一个4线的SPI FLASH都支持100MHz时钟,400Mbit的速度了,靠中断肯定是不行的,目前NUC970所支持的几种存储器里面,估计只能靠TF或者eMMC了,毕竟有DAM支持,nand flash现在用的少,占用IO也多,速度也就那样,块还出奇的大,还要自己做写均衡,坏块管理,eMMC都是BGA封装,目前有个这种的SD NAND 使用的SDIO接口的大容量flash,兼容SD卡驱动,可以实现QFN-8封装的1-2G大容量存储。
//足够简单的SPI寄存器
//SPI========================================================================================================
#define SPI0_BASE (0xB8006200) //寄存器基址
#define SPI1_BASE (0xB8006300) //寄存器基址
typedef struct
{
vu32 CNTRL;
vu32 DIVIDER;
vu32 SSR;
u32 Reserved1;
vu32 DATA[4];
}SPI_TypeDef;
#define SPI0 ((SPI_TypeDef *) SPI0_BASE)
#define SPI1 ((SPI_TypeDef *) SPI1_BASE)
其中可以支持突发4次传输,理论上可以实现一次传输16字节,但是没啥意义呀,在时钟为18MHz的时候,通讯128bit占用时间为7uS,7us中断一次CPU也不划算,还不如直接阻塞,直接阻塞时使用8bit发送与一次发送16个8bit阻塞时间几乎没区别,如果时钟速度更高,这个时间会更短,就更不能用中断了(太频繁,会降低系统实时性),还不如用可剥夺的实时OS直接阻塞,这就是没有DMA的缺点,有DMA时至少读取512直接都不用一次中断,而且效率更高。
|