SPI协议其实是包括:Standard SPI、Dual SPI和Queued SPI三种协议接口,分别对应3-wire, 4-wire, 6-wire。
(1)通常我们说的SPI就是Standard SPI,有4根信号线,分别为CLK、CS、MOSI和MISO。数据线工作在全双工。
(2)Dual SPI,它只是针对SPI Flash而言,不是针对所有SPI外设。对于SPI Flash,全双工并不常用,因此扩展了mosi和miso的用法,让它们工作在半双工,用以加倍数据传输。也就是对于Dual SPI Flash,可以发送一个命令字节进入dual mode,这样mosi变成SIO0(serial io 0),mosi变成SIO1(serial io 1),这样一个时钟周期内就能传输2个bit数据,加倍了数据传输。
(3)类似的,还可以扩展,与也是针对SPI Flash,Qual SPI Flash增加了两根I/O线(SIO2,SIO3),目的是一个时钟内传输4个bit
而QSPI就是Queued SPI的简写。 软件工具: RT-Thread Studio
NuWriter
SecureCRT 一、rt-thread studio新建基于NK-980IOT开发板的基础工程 二、硬件准备 插上2根USB线,一根用于烧录,一根用于系统串口打印 三、编译生成bin文件,并使用NuWriter烧录到DDR RAM 四、烧录完成后,启动显示等待用户输入 五、输入list_device 查看注册的设备可以找到QSPI0,及QSPI01,nand等的设备 六、输入help命令,可看可操作nand flash的命令 七、将会使用新唐的drv_spinand的驱动函数进行,首先第一步对nread函数读取数据增加打印功能 if (spinand_read_page(device, page, &data_ptr[0], SPINAND_FLASH_PAGE_SIZE, &spare[0], SPINAND_FLASH_OOB_SIZE) != RT_EOK)
goto exit_nread;
LOG_I("Partion:%d page-%d", partition, page);
for( uint32_t i=0; i
for( uint8_t j=0; j<16; j++ ){
rt_kprintf("%02X ",data_ptr[i+j]);
}
rt_kprintf("
");
}
在nwrite函数中对写入数据进行序列初始化
for (i = 0; i < SPINAND_FLASH_PAGE_SIZE; i ++)
data_ptr = i / 5 - i;
八、输入nwrite、nread、nerase_all分别进行写入,读取,擦除,读取测试
写入命令:nwrite nand0 1
读出命令:nread nand0 1
读取数据如下
擦除命令:nerase_all nand0
读出命令:nread nand0 1
读取数据如下
九、总结 原来一直在用spi nor flash作文件系统,spi nor flash对接是SFUD通用的spi flash 驱动,没细看这个spi nand flash对接是MTD驱动,注意了这个是spi nand flash。
原作者:kun222
|