2009年12月10日 星期四

MCF52259 ColdFire QSPI 燒到外接的Flash

最近Lab新買了一批Freescale MCF52259 ColdFire
我們要把舊的開發板功能Port到52259上

試了好久才發現Freescale附的Driver有些問題

QSPIInit(500, 0, 8, 100, 255, 1)
初始化QSPI,第二個參數是SPI mode,在這邊我們設成0
這邊請參考你用的Flash datasheet

在Init的時候要把QWR的CSIV enable,不知道為什麼Driver預設是disable
設成disable的話,CS一開始就會被拉成High
MCF_QSPI_QWR = MCF_QSPI_QWR_CSIV

因為是QSPI,所以會配給一塊RAM用來存command跟data
command就是QCR那些設定
不論是command還是data,要存到RAM上的方法都是透過QAR和QDR
把要存的位置放到QAR,command或是data放到QDR
這樣就會被存到對應的RAM上
然後QAR會自動遞增,用來存下一個command或是data
被放到RAM上的command和data會按照他在RAM上的位置兩兩一組
當QSPI被enable時(MCF_QSPI_QDLYR = MCF_QSPI_QDLYR_SPE)
會用0x20的command把0x00的data送出去
收回來的資料會存在0x10
以此類推,buffer一次最多可以存16bytes

在這邊我們發現的問題是用光碟上的QSPI範例,command沒有被修改到。後來我們發現原因是QCR只有用8~15 bit,但是Driver沒有把我們填的值shift到正確位置,多了一個shift的動作就可以正常運作了

最後寫到Flash的步驟,他的格式是先送write的op code,之後送要write的位置,接下來送要write的資料過去,就會依序寫到Flash裡頭,要注意的地方是,當Write完成之後要把CS拉成high,拉成high有點像reset的意思,這樣Flash才會知道你寫完了,接下來又可以送新的op code給他

我們舊的sensor node是用eeprom,這邊是eeprom的datasheet
做法跟flash差不多

http://www.datasheetcatalog.com/datasheets_pdf/A/T/2/5/AT25080.shtml

沒有留言:

張貼留言