疑惑点:为什么在发送解锁命令时,我们不用右移一位,而发送扇区地址时却要右移一位(nor_cmd函数内部已经左移一位)
处理器与NOR flash存储器的错位连接:
对于处理器来说,一个地址对应的是一个字节(8位),也就是说处理器的地址线对应的最小数据单元是字节。
如果处理器最小数据单元是8位,存储器位宽是16位,那在我们写程序时会特意进行16位操作吗?显然不会,我们写代码时,可不管外设到底是多少位。这是如何实现的呢?
原因:有存储控制器(MemoryController)这个中间层。存储控制器根据存储器的位宽,每次总是读/写16位数据。
外设位宽是8时,处理器的A0~AXX与外设的A0~AXX直接相连
外设位宽是16时,处理器的A1~AXX与外设的A0~AYY直接相连,表示不管处理器的A0是0还是1,外设看到的都是同一个地址,对应16位的数据,存储控制器对数据进行选择或组合,再提供给处理器。
外设位宽是32时,处理器的A2~AXX与外设的A0~AZZ直接相连,表示不管处理器的A0A1是00,01,10还是11,外设看到的都是同一个地址,对应32位的数据,“MemoryController”对数据进行选择或组合,再提供给处理器
32位的FLASH,FLASH的A0要接ARM的A2,因为32位地址表示4个字节,每次要跳4个字节的话