STC8通过SPI读写W25Q128

这几天在看SPI总线,应用主要是围绕W25Q128的读写进行的。
网上关于W25Q的程序可以说非常多,大多是以STM32为主控芯片进行的。无妨。这块FLASH的寄存器是基本固定的,但是只有英文手册确实是有点头疼。。。
第一个大块是STC8的SPI功能。涉及到的寄存器有三个:
SPSTAT:状态寄存器,有中断标志位和写冲突标志位
SPCTL:控制寄存器,控制发送顺序,时钟极性,相位等等
SPDAT:数据寄存器
STC8通过SPI读写W25Q128_第1张图片 第二个大块是W25Q128的指令
这里主要是网上的资源
STC8通过SPI读写W25Q128_第2张图片其实数据手册上写的都还算比较清楚,读写都有固定的时序。看一眼图就一目了然了。我这边因为Device ID,JEDEC ID和Unique ID的事情研究了一下。很多程序里交代的不是很清楚。

  • Device ID:W25Q在正常模式下接受ABh指令以及三个00h后,会输出Device ID,SPI模式下返回的是17h。在接收到90h以及三个00h后将输出17h,称为Device ID。代表我们使用的是W25Q128型号。

  • JEDEC ID: JEDEC是由生产厂商们制定的国际性协议,主要为内存制定。W25Q接收到9Fh指令后,先输出EFh,再输出8位存储类型ID(应该是4018h的高8位),再输出8位存储容量ID(4018h的低8位)。

  • Unique ID:这个貌似是每个芯片不一样的,没怎么用。

    虽然了解了这些对于SPI总线的了解是远远不够的,但是读写W25Q128的程序基本上能看懂了。杜洋老师讲过学习的边界,我觉得是很有意思的观点。在我现在的阶段,每一项协议都深入研究时间成本太高,也没有必要,最重要的使用。在使用的过程中发现问题,再去研究原理。这样相辅相成的推进。
    当然这次调试也出现了诸多问题,先记在这里有空填坑。
    1,很多STC例程用到了ACC累加器,查了资料之后觉得这应该是偏底层的一种写法,直接操作累加器可能指令读的更快一些?
    2,程序莫名循环,串口程序之前调过是没有问题的。今天用串口输出W25Q128的数据莫名开始停不下来,找了半天没找到问题,只得用一个空的while结束程序,有点头秃。
    3,W25Q128的内存地址,应该是0~16M,由于程序只用了10个字节,关于其地址还没有过多的使用

你可能感兴趣的:(51)