freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于spi的串行flash存儲(chǔ)器讀寫系統(tǒng)設(shè)計(jì)本科畢業(yè)設(shè)計(jì)-資料下載頁

2025-08-06 06:06本頁面
  

【正文】 nt]=serial_out_data。 trans_in_point=(trans_in_point+1)%TRANS_BUF_LEN。 }} SPI操作SPI操作主要是從其初始化開始,接著是讀串行FLASH存儲(chǔ)芯片狀態(tài)寄存器與寫狀態(tài)寄存器,然后再是芯片字節(jié)編程與擦除。流程圖如圖42:圖42 SPI操作流程圖 SPI初始化初始化操作主要是將控制字輸入SPCR和SPSCR。1.置MSTR=1,以置MCU為主機(jī)方式,對I/O擴(kuò)展來說,這是必須的。 2.置SPR1和SPR0為適當(dāng)值,以使SPI時(shí)鐘(SPSCK)能滿足所有擴(kuò)展的I/O芯片的時(shí)鐘要求。對M68HC08,在總線頻率為8MHz時(shí),最高的SPI時(shí)鐘頻率為4MHz,完成一次串行數(shù)據(jù)傳送約需2ms。 3.置CPOL和CPHA為適當(dāng)值,以使SPI時(shí)序能滿足所有串行I/O擴(kuò)展芯片的時(shí)序要求。其中主要應(yīng)考慮I/O擴(kuò)展芯片是在SCK上升沿還是下降沿移入(或移出)數(shù)據(jù)。對一般的D觸發(fā)器類型的擴(kuò)展芯片,均是在SCK上升沿移入和移出數(shù)據(jù)。這樣,對于輸入芯片(如74HC1616589等),應(yīng)選擇MCU在下降沿采擇輸入數(shù)據(jù)的方式。即可選CPOL=0,CPHA=1。 對于輸出芯片(如74HC16595等),應(yīng)選擇MCU在上升沿前半周(下降沿)輸出數(shù)據(jù)的方式,即可選CPOL=0,CPHA=0或CPOL=1,CPHA=1。對于需同時(shí)擴(kuò)展這兩種芯片,則應(yīng)置CPHA=1,CPOL=1,同時(shí)在輸入芯片的時(shí)鐘輸入端前加一個(gè)反相器,而輸出芯片的時(shí)鐘輸入端則直接SPSCK。對于一些特殊的串行I/O擴(kuò)展芯片,如串行A/D、D/A芯片,串行時(shí)鐘芯片,串行EEPROM,串行LCD、LED驅(qū)動(dòng)芯片等,應(yīng)根據(jù)它們的特性選擇適當(dāng)?shù)腃POL和CPHA,方法同前。 4.按是否使用SPI中斷來決定使SPIE=0還是1。一般情況下,對主機(jī)方式的SPI,均采用程序詢問方式,特別是在SPI時(shí)鐘速率較高時(shí)更應(yīng)如此。對從機(jī)方式的SPI,應(yīng)采用中斷方式,因?yàn)檫@時(shí)的串行發(fā)送由外部主機(jī)啟動(dòng)。見圖43: 圖43 SPI時(shí)序圖void Init_Spi(void){ SPCR=0x50。 P1=0xFF。 SCK=0。} 串行FLASH讀狀態(tài)寄存器串行FLASH讀狀態(tài)寄存器主要用到了ReadStatusRegister (RDSR)指令。讀狀態(tài)寄存器指令允許讀狀態(tài)寄存器。狀態(tài)寄存器在任意一個(gè)時(shí)間,甚至在一個(gè)寫(編程/擦除)操作的過程中都可能被讀。當(dāng)一個(gè)寫操作正在進(jìn)行中,那么繁忙字節(jié)都可能被檢查,這個(gè)檢查發(fā)生在發(fā)送任何一個(gè)去確認(rèn)新的命令將被設(shè)備接收的命令之前。CE在RDSR指令進(jìn)入和保持低電平直到狀態(tài)數(shù)據(jù)被讀之前必須處于低電平。讀狀態(tài)寄存器是連續(xù)地處于時(shí)鐘周期中,直到被一個(gè)從低到高的CE信號(hào)中斷??梢詮膱D44讀RDSR指令時(shí)序。 圖44 讀狀態(tài)寄存器時(shí)序圖當(dāng)CPHA =CPOL時(shí), 數(shù)據(jù)總在時(shí)鐘信號(hào)的上升沿移進(jìn)Flash,下降沿移出Flash,即模式0和3。 本設(shè)計(jì)所用的SST25VF040支持最常用的模式0和3。MISO和MOSI用于串行接收和發(fā)送數(shù)據(jù),傳輸?shù)臄?shù)據(jù)為8位,先為MSB(高位),后為LSB(低位)。在SPI設(shè)置為主機(jī)方式時(shí),MISO是主機(jī)數(shù)據(jù)輸入給,MOSI是主機(jī)數(shù)據(jù)輸出線。這時(shí)SPMSTR控制位(位于SPCR寄存器位5)應(yīng)由程序設(shè)置為1從允許主機(jī)方式。如圖44,發(fā)送將MSB設(shè)為0x05用于ReadStatusRegister(RDSR)指令。具體編程如下:unsigned char SF_Read_Status_Register(unsigned char CS){ unsigned char byte = 0。 CS_Low(CS)。 /* enable device */ Spi_Read_Write(0x05)。 /* send RDSR mand */ byte=Spi_Read_Write(0x00)。 /* receive byte */ CS_High(CS)。 /* disable device */ return byte。} 串行FLASH寫狀態(tài)寄存器 寫狀態(tài)寄存器指令把新的數(shù)據(jù)寫入BP3, BP2, BP1, BP0,和狀態(tài)寄存器的BPL。在WRSR指令執(zhí)行以前,寫狀態(tài)寄存器指令的命令時(shí)序被進(jìn)入和趨于高電平之前CE必須趨于低電平,見圖45:圖45寫狀態(tài)寄存器時(shí)序圖當(dāng)寫保護(hù)處于低電平并且BPL被設(shè)置為“1” 時(shí)執(zhí)行寫狀態(tài)寄存器指令將被忽略。當(dāng)寫保護(hù)處于低電平,BPL位僅能被設(shè)置從“0”到“1”到鎖住狀態(tài)寄存器,但是不能被復(fù)位從“1”到“0”。當(dāng)寫保護(hù)處于高電平,BPL的上鎖功能無效,狀態(tài)積存器中的BP3, BP2, BP1, BP0,都能夠改變。只要BPL 被設(shè)置為0 或者寫保護(hù)管腳被趨于高(VIH), 優(yōu)先于寫狀態(tài)寄存器指令結(jié)束的CE 管腳從低到高的上升沿,在狀態(tài)寄存器中的數(shù)據(jù)就能被寫狀態(tài)寄存器指令改變。這樣在一個(gè)單獨(dú)的寫狀態(tài)寄存器指令能設(shè)置BPL到“1”到上鎖并且狀態(tài)寄存器能同時(shí)改變BP2, BP1, BP0。下表41是對寫保護(hù)和BPL的具體描述:表41寫保護(hù)和BPL的具體描述程序如下:void SF_Write_Status_Register(unsigned char CS,unsigned char byte){ CS_Low (CS)。 /* enable device */ Spi_Read_Write (0x01)。 /* select write to status register */Spi_Read_Write(byte)。 /* data that will change the status of BPx or BPL (only bits 2,3,4,5,7 can be written)*/ CS_High (CS)。 /* disable the device */} 字節(jié)編程字節(jié)編程指令是把選擇的字節(jié)給預(yù)期的數(shù)據(jù)。當(dāng)初始化編程操作時(shí)所選擇的字節(jié)必須處于被擦除的狀態(tài)(FFH)當(dāng)初始化編程操作。一個(gè)字節(jié)編程指令是用來將要被忽略的保護(hù)存儲(chǔ)器區(qū)域。優(yōu)先于任何一個(gè)寫操作,寫使能WriteEnable(WREN)指令本執(zhí)行操作。CE必須保持低電平在整個(gè)字節(jié)編程過程中。字節(jié)編程指令必須被初始化執(zhí)行一個(gè)8位字節(jié)的命令,02H,接著就是地址位A23A0,數(shù)據(jù)被按序從MSB(bit7)到LSB(bit 0)輸入。在指令被執(zhí)行之前,CE必須被置為高電平。用戶可以測試軟件狀態(tài)寄存器中的繁忙位或者等待內(nèi)部的時(shí)間字節(jié)編程操作完成的TBP。圖46 字節(jié)編程時(shí)序圖程序如下:void SF_Byte_Program(unsigned char CS,unsigned long Dst,unsigned char byte){ SF_Wr_Enable(CS)。//寫允許 CS_Low (CS)。 /* enable device */ Spi_Read_Write (0x02)。 /* send Byte Program mand */ =Dst。 Spi_Read_Write ( [1])。 /* send 3 address bytes */ Spi_Read_Write ( [2])。 Spi_Read_Write ( [3])。 Spi_Read_Write (byte)。 /* send byte to be programmed */ CS_High (CS)。 /* disable device */ SF_Wait_Busy (CS)。 SF_Wr_Disable(CS)。 //寫禁止 } 下載HEX文件 二進(jìn)制與Intel格式比較在計(jì)算機(jī)與外設(shè)的串行通信中,所傳輸?shù)臄?shù)據(jù)包括兩種格式:文本數(shù)據(jù)和二進(jìn)制數(shù)據(jù)。因而對應(yīng)的傳輸方式也有兩種:文本(字符)模式和二進(jìn)制(字節(jié))模式。即在兩種方式下,分別把數(shù)據(jù)以文本和二進(jìn)制數(shù)據(jù)的形式傳輸。而在實(shí)際應(yīng)用中,不同的場合,兩者各有其特點(diǎn)。 文本模式通常以小于ASCⅡ128的字符碼來傳遞,通常用于傳送文字型態(tài)的資料指令。二進(jìn)制模式可以用于傳送文件如exe 文件,大于128 的ASCⅡ碼單字節(jié)字符如與單片機(jī)通信時(shí)的嵌入控制字符等,甚至在出現(xiàn)了誤碼時(shí)二進(jìn)制模式也可以進(jìn)行正確辨別并做出相應(yīng)的處理。當(dāng)然二進(jìn)制模式也可以用于傳送文字資料和指令,但它需要在接收端進(jìn)行相應(yīng)處理才能復(fù)現(xiàn)資料。兩者都可以傳送數(shù)值數(shù)據(jù),但是二進(jìn)制模式傳輸?shù)乃俣缺任谋灸J娇斓枚唷@缫獋魉鸵粋€(gè)數(shù)值1000 ,如果使用文本模式則需要4個(gè)字節(jié),即1 ,0 ,0 ,0 各占一個(gè)字節(jié)。如果以二進(jìn)制模式傳送的話,由于1000這個(gè)數(shù)值在計(jì)算機(jī)上可以用一個(gè)二進(jìn)制整數(shù)來表示,所以它只要2個(gè)字節(jié)就可以了,兩者相差了50%的傳輸時(shí)間。數(shù)據(jù)量較小時(shí)差異不是很明顯,但在數(shù)據(jù)量很大時(shí),則這個(gè)差異就會(huì)降低系統(tǒng)效能,必須加以考慮。二進(jìn)制的字節(jié)變化小,因?yàn)槎M(jìn)制只是用0和1來表示,而 HEX格式表示是用十六進(jìn)制,數(shù)字和字母都可以;在占用空間位置方面,二進(jìn)制占用的位置較少,而對于HEX格式來說由于表示方式較多,即一個(gè)字符占用位置多;使用空間效率方面,對于串行FLASH芯片一個(gè)地址位存8bit(一個(gè)字節(jié))的數(shù)據(jù),二進(jìn)制的一個(gè)地址空間只需存一位,大大降低了使用效率;最后在校驗(yàn)效率方面,二進(jìn)制傳輸模式增加了文件開始,結(jié)束,擴(kuò)展,即增加了數(shù)據(jù)量,對校驗(yàn)帶來了困擾。具體比較如表42:表42 二進(jìn)制與HEX格式比較比較對象字節(jié)變化占用位置使用空間效率校驗(yàn)效率二進(jìn)制小少低低HEX文件格式大多高高 HEX文件格式HEX文件格式是Intel公司提出的按地址排列的數(shù)據(jù)信息,數(shù)據(jù)寬度為字節(jié),所有數(shù)據(jù)使用16進(jìn)制數(shù)字表示, 常用來保存單片機(jī)或其他處理器的目標(biāo)程序代碼。它保存物理程序存儲(chǔ)區(qū)中的目標(biāo)代碼映像。一般的編譯軟件產(chǎn)生的用于寫入芯片的文件都是IntelHEX格式的文件,IntelHEX文件屬于文本文件,可以用記事本查看,一個(gè)IntelHEX文件的一行稱為一個(gè)記錄,每個(gè)記錄都是由16進(jìn)制字符組成的,兩個(gè)字符表示一個(gè)字節(jié)的值,InterHEX文件通常由若干條記錄組成,每個(gè)記錄都具有如下的形式: :CCAAAARR…ZZ CC 本條記錄中的數(shù)據(jù)字節(jié)數(shù) AAAA 本條記錄中的數(shù)據(jù)在存儲(chǔ)區(qū)中的起始地址 RR 記錄類型 00 數(shù)據(jù)記錄。表示該記錄所包含的數(shù)據(jù)為實(shí)際要燒寫到存儲(chǔ)器中的數(shù)據(jù)01 文件結(jié)束記錄,表示該記錄為本文件的最后一個(gè)記錄02 擴(kuò)展段地址記錄。表示該記錄所包含的數(shù)據(jù)為段地址03 轉(zhuǎn)移地址記錄(transfer address record)04 擴(kuò)展線性地址記錄。表示該記錄所包含的數(shù)據(jù)為線性地址… 數(shù)據(jù)域ZZ 數(shù)據(jù)域校驗(yàn)和 HEX文件的每一行都是這樣的格式:表43 HEX文件格式表0x3a數(shù)據(jù)長度 1byte數(shù)據(jù)地址 2byte數(shù)據(jù)類型 1byte數(shù)據(jù) nbyte校驗(yàn) 1byte0x0d0x0a例如:: 1000000018F09FE518F09FE518F09FE518F09FE5C0按照上面的數(shù)據(jù)行格式分析如表44表44 HEX文件格式分析0x3a數(shù)據(jù)長度 1byte 10數(shù)據(jù)地址 2byte00 00數(shù)據(jù)類型 nbyte00 數(shù)據(jù) 1byte18F09FE518F09FE518F09FE518F09FE5 校驗(yàn) 1byte C00x0d0x0a 每行中的數(shù)據(jù)并不是一定有的,第二個(gè)字節(jié)數(shù)據(jù)長度為0,那么這行就沒有數(shù)據(jù)。由于每行標(biāo)識(shí)數(shù)據(jù)地址的只有2Byte,所以最大只能到64K,為了可以保存高地址的數(shù)據(jù),就有了Extended Linear Address Record。如果這行的數(shù)據(jù)類型是0x04,那么,這行的數(shù)據(jù)就是隨后數(shù)據(jù)的基地址。例如:: 020000040004F6: 1000000018F09FE518F09FE518F09FE518F09FE5C0: 1000100018F09FE5805F20B9F0FF1FE518F09FE51D第一行,是Extended Linear Address Record,里面的數(shù)據(jù),也就是基地址是0x0004,第二行是Data Record,里面的地址值是0x0000。那么數(shù)據(jù)18F09FE518F09FE518F09FE518F09FE5要寫入FLASH中的地址為(0x0004 16)| 0x0000,也就是寫入FLASH的0x40000這個(gè)地址。同樣,第三行的數(shù)據(jù)的寫入地址為0x40010。當(dāng)一個(gè)HEX文件的數(shù)據(jù)超過64k的時(shí)候,文件中就會(huì)出現(xiàn)多個(gè)Extended Linear Address Record。End of File Record 行是每一個(gè)HEX文件的最后一行。例如::
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1