公司原本使用的norflash是使用8位模式的。後來公司新的項目中使用了16位模式。原來的驅動需要移植到新的模式下。折騰了一下,終於搞定。發現8位的寫命令操作到了16位時,需要將操作的地址左移1位。總結如下:
在8位模式下,地址可以分爲奇地址和偶地址。如0x00,0x01,0x02,我們可以看到地址A0是0、1交替出現。
在16位模式下,由於每一次訪問都是16位數據,相當於只有偶數地址出現,如0x00,0x02,0x04,0x08,我們可以看到A0位一直爲低。
在16位模式時,我們發現A0一直爲低,是多餘的。在硬件設計中,可以直接把這個地址線接地,從而節省了一個引腳。這時cpu的A0腳接flash的A1腳。
這裏看來是要右移一位纔對的啊?爲什麼這裏還要左移呢?
原來在硬件上會直接對訪問flash的地址進行右移來簡化上述接線方式的地址訪問。但是公司的機器是把flash和cpu的所有地址線一一對應的,a0-a0,a1-a1...。所有軟件需要左移一位來抵消硬件的右移操作。