KL25用SPI操作nor flash
来源:互联网 发布:淘宝零食店策划书 编辑:程序博客网 时间:2024/06/05 15:13
KL25的SPI连接一个nor flash。该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据。
通常,SPI有4种模式,取决于CPOL与CPHA如何配置。
CPOL决定SPI总线空闲时的时钟恒定为高还是为低。CPHA决定是第一个时钟沿采样还是第二个时钟沿采样。
KL25单片机的数据手册有如下叙述:
翻译如下:
CPOL为0,SPI空闲时时钟为低;(等价意思是第一个跳变沿为上升沿)
CPOL为1,SPI空闲时时钟为高;(等价意思是第一个跳变沿为下降沿)
CPHA为0,第一个时钟沿时数据已经准备好了。(即第一个时钟沿采样)
CPHA为1,第一个时钟沿时数据刚启动。(即第二个时钟沿采样)
所以,如果想要上升沿采样,应该配置CPOL为0,CPHA为0。
强烈鄙视网上的KL25教学视频,居然说CPHA决定上升沿采样还是下降沿采样,说:CPHA为1时为上升沿采样,为0时是下降沿采样,误人子弟啊!擦!
KL25的SPI总线用同一名称寄存器传数据和接收数据,不过两者虽然同名,地址却不相同,这一点我们不用理会(网上视频教学这么讲)。SPI操作的显著特点是本身具有环路特征,所以想要得到从机的输出,主机必须输入,把从机的数据给挤出来。主机有多少输入,从机才会有多少输出,从机本身不具备输出能力,所以主机不能仅仅只输入控制命令,接着就等从机的输出,它必须接着输入冗余内容去挤从机的数据。
因为SPI总线的特点,所以存在着一定的总线效率浪费,比如当我们发送控制命令时,此时从机也有返回值,只不过对我们没意义,所以没有读取;当我们想要索取从机的寄存器值时,必须发送冗余字节给从机,此时也是在浪费总线效率。
下面给出我写的代码:
这里没有使用SPI总线的自动片选功能,而是使用GPIO来控制从机的片选,优点在于灵活。
下面的代码是操作nor flash的控制命令。要求先输入命令0xAB,然后写入三个冗余字节0x00(等待从机),接下来从机才会返回device id。这里要注意,主机要想得到从机的数据,不能仅仅只写三个冗余字节,因为从机是没有发送数据的能力的,它想发送必须是主机用数据将其挤出来。所以主机必须多发一个冗余的字节。
- KL25用SPI操作nor flash
- U-boot操作Flash (NOR, NAND & SPI)
- U-Boot操作Flash (NOR, NAND & SPI)
- U-Boot操作Flash (NOR, NAND & SPI)
- SPI Nor Flash
- spi nor flash驱动
- SPI Nor Flash
- [转载]U-Boot操作Flash (NOR, NAND & SPI)
- spi nor flash使用汇总
- SPI FLASH与NOR FLASH的区别?
- spi flash 和 Nor flash 区别
- Nor Flash的操作
- Nor Flash操作程序
- FLASH 存储学习-串行SPI nor
- U-boot and Flash (NOR, NAND & SPI)
- linux设备驱动程序之SPI nor flash
- SPI FLASH NAND FLASH 和NOR FLASH 的关系
- SPI flash操作小计
- <<C语言深度剖析>>学习笔记之六之内存管理
- Gray-level Co-occurrence Matrix(灰度共生矩阵)
- vc将字符串表示的任意位数字进行小数位保留和四舍五入
- android——CRUD(在上一篇博客的基础上)
- 10种排序算法总结
- KL25用SPI操作nor flash
- jdk和jre有什么区别?
- js定时持行函数
- 希望能得到一些大神的指点,加QQ群:249627436 java技术交流群
- 排序算法总结
- wxPython菜单与工具栏基础示例
- js字符串常用判断方法
- [Android问答] px、dp和sp,这些单位有什么区别?
- 杭电2500