Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
新會員
|
Dear Ryang
我在寫入與讀取中間插入一行while ( ! SPI_EE_Ready() ) 應該就可以將寫入與讀取時間延後4ms了吧??(test 1) 另外我有在測試過其他方式在寫入與讀取中間加入for(i=0;i<100000;i++)應該也已經超過4ms了吧??(test 2) ***test 1************************************ SPI_EEPROM_ByteWrite( 0x10 , 0xAA ) ; while ( ! SPI_EE_Ready() ) ; EEPROM_Data=SPI_EEPROM_ByteRead( 0x10) ; ************************************** ***test 2*********************************** SPI_EEPROM_ByteWrite( 0x10 , 0xAA ) ; for(i=0;i<100000;i++); EEPROM_Data=SPI_EEPROM_ByteRead( 0x10) ; ************************************** 目前測試結果還是無法讀取到SDI輸入的數值...是否還有其他建議......
發表於: 2010/2/10 19:29
|
|||
|
Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
版主
|
請問你寫入一個 Byte 到 EEPROM 後經多久就讀資料回來?
EEPROM 美血衣筆資料莫約需4mS 的時間,不可以馬上就讀回來的。
發表於: 2010/2/10 17:59
|
|||
|
Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
新會員
|
Dear Ryang
THANKS A LOT..... 關於你所提到程式的部份目前我所使用的範例訊息如下: Program : PIC24F_PPS_SPI 此範例 Demo 如何使用 PIC24FJ16GA002 的 SPI1 Module來寫入/讀取 EEPROM M25P05 就您所言在MPLAB針對IC DEVICE設定成PIC24FJ16GA002 在組譯中應該就會自動指向對應的定義,是否是這樣?? ( #ifdef __PIC24FJ16GA002__ /* ADC */ #define adc_v1_1 /* CMP */ #define cmp_v1_1 ..(以下省略).. .. .. .. .. #endif ) *************************** 目前我將程式燒入ic中後驗證寫入M25P05及讀取M25P05的輸出波形皆為正常(SDI所顯示波形正確),但是在接收後作數值比較時EEPROM_Data1都是0x00(正確應為0xAA),理論上已經使用示波器確認SDI接收到的波形,應該軟體判斷上就不會有問題吧?? 還是現在所使用的程式中並無將SDI所接收到的數值RETURN給EEPROM_Data1呢??? ---------------------------- EEPROM_Data1 = SPI_EEPROM_ByteRead( 0x10 ) ; if(EEPROM_Data1==0xAA)//判斷寫入與讀取數值是否正確 { for(i=0;i<100000;i++) { LED1=1; } } else LED1=0; 不好意思,初次使用PIC的MCU是否能作詳細一點的建議,謝謝。 Attach file: Link only for registered users
發表於: 2010/2/10 16:43
|
|||
|
Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
版主
|
剛在細看一下你的程式,應該是 dsPIC30F Peripheral 教材裡的 SPI 範例。
unsigned char SPI_ByteWrite(unsigned char SPI_DATA )
原來的程式是給 dsPIC30F 用的,PIC24FJ64GA004 的定義是 spi_v1_2 (看一下 pic24f_periph_features.h 對各種 PIC24 的歸類) 在 PIC24 裡 SPI 變成 SPI1 or SPI2 所以程式要修改一下。 還有 SPI_ByteWrite( ) 回傳的值是 SPI1BUF 暫存器,他是讀取 SDI (SPI Slave) 所傳回的訊號,跟你所送出去的 SDO 訊號是不同的。
發表於: 2010/2/10 14:41
|
|||
|
Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
新會員
|
讀取段程式如下:
unsigned char SPI_EEPROM_ByteRead(unsigned int SPI_Addr ) { unsigned char Temp_Buffer; unsigned ReadDelay ; SPI_CS = 0 ; SPI_ByteWrite ( SPI_EE_READ ); // Send Read Command SPI_ByteWrite ( 0x00 ); // Addr A23~A16 SPI_ByteWrite ( (SPI_Addr >> 8) & 0x00ff ); // Addr A15~A8 SPI_ByteWrite ( SPI_Addr & 0x00ff ) ; // Addr A7~A0 Temp_Buffer = SPI_ByteWrite ( 0xff ) ; SPI_CS = 1 ; return Temp_Buffer ; } 只是return 的Temp_Buffer數值都是0x00,理論上讀取動作完成後 Temp_Buffer應該是我先前寫入同位址所儲存數值,應該是這樣對吧?? 感謝您的回答,謝謝。
發表於: 2010/2/10 11:25
|
|||
|
Re: PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
版主
|
因為程式只有片段,無法知道全部的情形。
請問,在對 SPI EEPROM 動作前,請問 25LCxxx 的 /CS 腳有沒有用I/O 拉成 Low ?
發表於: 2010/2/10 11:00
|
|||
|
PIC24FJ64GA004 系列 利用 PPS 功能來規劃並完成SPI Master 的範例 .....EEPROM_Data1
|
||||
---|---|---|---|---|
新會員
|
請教各位大大,目前我是使用pic24GA16002搭配一顆spi flash作spi的介面練習,是使用範例程式來修改ㄉ(只修改pin define的部份,其他設定無修改),可是再程式段中讀取與寫入的判斷式始終是無法成立,EEPROM_Data1總是等於0x00,我寫入的數值為0xAA,已經使用示波器檢查過輸出的波形是0xAA無誤,是否是軟體中哪邊出問題阿????
程式段如下: #define LED1 LATBbits.LATB6 #define DIR_LED1 TRISBbits.TRISB6 unsigned int EEPROM_Data1; unsigned long int i; int main(void) { Init_PPS(); Init_SPI(); DIR_LED1=0; SPI_EEPROM_ByteWrite( 0x10 , 0xAA ) ; while ( ! SPI_EE_Ready() ) ; EEPROM_Data1 = SPI_EEPROM_ByteRead( 0x10 ) ; if(EEPROM_Data1==0xAA) { for(i=0;i<100000;i++) { LED1=1; } } else LED1=0; while(1); } void Init_PPS(void) { RPOR6bits.RP12R = 8 ; // SCK1 RPOR7bits.RP14R = 7 ; // SDO1 RPINR20bits.SDI1R = 13 ; // SDI1 } Q2: 程式一段時間後,會在重新執行,是那些狀態才會這樣??
發表於: 2010/2/9 16:28
Edited by edisom on 2010年02月09日 17:24:16
|
|||
|