JTAG接口在線燒寫(xiě)Flash的實(shí)現(xiàn)
Flash 的讀操作與傳統(tǒng)EPROM 讀操作相同。由于芯片使用軟件保護(hù)模式進(jìn)行操作, 用戶編程時(shí), 只要向指定的地址寫(xiě)入指定的序列, 就可以啟動(dòng)Flash 芯片內(nèi)部的寫(xiě)狀態(tài)機(jī), 完成指定的操作。表2 為Flash 的操作命令說(shuō)明( 對(duì)芯片的擦除和編程都是按照字進(jìn)行的), 表中所有的數(shù)據(jù)都是十六進(jìn)制數(shù)。
Flash 的正確操作順序: 先復(fù)位, 再擦除, 最后編程。
按照表2 提供的操作命令時(shí)序來(lái)實(shí)現(xiàn)對(duì)AM29LV800 的擦除和編程,PA 為編程地址,PD 為編程數(shù)據(jù)。Flash 擴(kuò)展在CE1 空間, 起始地址是200000, 所以操作時(shí)所有地址必須加上200000。例如燒寫(xiě)工程中擦除部分命令為:
表2 AM29LV800B 的操作命令說(shuō)明
芯片擦除需要占用6 個(gè)總線周期, 而芯片編程需要4 個(gè)總線周期, 依照表3 的數(shù)據(jù), 在每個(gè)總線周期對(duì)相應(yīng)地址寫(xiě)入命令字就可以了。用戶一般都是對(duì)芯片進(jìn)行寫(xiě)操作, 寫(xiě)操作只能使‘1’ 變‘0’ , 而擦除只能使‘0’ 變?yōu)?lsquo;1’ 。圖3 為擦除和編程命令波形圖, 清楚地顯示了擦除和編程操作過(guò)程。
圖3 擦除和編程命令波形圖
判斷編程或擦除的結(jié)束是當(dāng)把編程或擦除的命令字按照其時(shí)序?qū)懭隖lash 時(shí), 在寫(xiě)編程命令時(shí)序或擦除命令時(shí)序的最后一個(gè)WE 上升沿到來(lái)之后,AM29LV800會(huì)自動(dòng)運(yùn)行一個(gè)嵌入在Flash 內(nèi)部的算法來(lái)判斷編程或擦除操作是否結(jié)束。采用觸發(fā)位校驗(yàn)的方法, 檢測(cè)數(shù)據(jù)切換位DQ6(Toggle Bit) 的狀態(tài), 連續(xù)讀數(shù)據(jù)會(huì)使DQ6 的值在‘0’ 和‘1’ 之間來(lái)回切換, 當(dāng)編程或擦除結(jié)束時(shí),DQ6 就停止值的切換。因此, 可以通過(guò)連續(xù)兩次讀DQ6 的值來(lái)判斷編程或擦除是否結(jié)束, 當(dāng)兩次讀得的值相同時(shí), 說(shuō)明編程或擦除結(jié)束, 否則沒(méi)有。觸發(fā)位檢測(cè)算法流程圖如圖4 所示。
圖4 觸發(fā)位檢測(cè)算法流程圖
評(píng)論