欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機模擬SPI讀數據,讀到的電平一直為0 [打印本頁]

作者: ywzqdpj    時間: 2023-3-17 22:08
標題: 單片機模擬SPI讀數據,讀到的電平一直為0
單片機用的是dspic33fj256mc710a,eeprom用的是at25128,spi通信;
在在線調試的時候正常,可以正常讀取,正常寫入;
但是下載程序到板子里面運行就不行,從eeprom里面讀的數據都是0x00,通過邏輯分析儀抓波形發現eeprom已經發出了正確的回復,但是讀取的時候全部是0x00;
也就是說,雖然eeprom發出了正確的信息,但是我的soft SPI讀取函數里面讀到的都是0,經過數據發現進入(SI == 1)的條件下語句0次,進入else的語句8次,所以在代碼里面讀取電平不是為高電平的(我用邏輯分析測了PIC單片機引腳端的電平,確實是有變化的正確電平)

正常結果.png (18.6 KB, 下載次數: 48)

正常結果.png

下載程序EEPROM有正確輸出.png (68.56 KB, 下載次數: 48)

下載程序EEPROM有正確輸出.png

錯誤結果.png (20.56 KB, 下載次數: 50)

錯誤結果.png

代碼.png (102.48 KB, 下載次數: 47)

代碼.png

作者: Y_G_G    時間: 2023-3-18 21:54
25系列的EEPROM的基本操作幾乎是完全一樣的
CS的時序很重要的
這是一個寫入函數,你參考一下
void Write_Data_25AA(u8 WriteByte,u8 Addr)//向指定地點寫入一個字節的數據
{
        u8 i;       
       
        CS_SPI_LOW;                                                                                                                                                //CS=0
        SPI_Write_Byte(WREN);                                                                                                        //寫入"寫使能命令"
        CS_SPI_HI;                                                                                                                                                //CS=1       
        delay_us(10);                                                                                                                                        //延時
       
        CS_SPI_LOW;                                                                                                                                                //CS=0
        SPI_Write_Byte(WRITE);                                                                                                //寫入"寫命令"
        SPI_Write_Byte(Addr);                                                                                                        //SPI寫入地址
        SPI_Write_Byte(WriteByte);                                                                                //寫入數據
        CS_SPI_HI;                                                                                                                                                //CS=1,寫入之后要把CS拉高,才能完成寫入
        delay_us(10);                                                                                                                                        //延時
       
        do
        {               
                CS_SPI_LOW;                                                                                                                                        //CS=0
                SPI_Write_Byte(RDSR);                                                                                                //寫入讀取STATUS狀態位命令
                i=SPI_Read_Byte();                                                                                                        //讀取STATUS狀態位中的:寫使能位=WEL,此位為1時,可以寫入
                CS_SPI_HI;                                                                                                                                        //CS=1
        }                                                                                                                                                                                        //讀取STATUS狀態位中的:寫進行位=WIP,此位為1時,正在寫入
        while(i&0x01);                                                                                                                        //等待寫進行位變成0*/               
}


作者: ywzqdpj    時間: 2023-3-19 19:57
Y_G_G 發表于 2023-3-18 21:54
25系列的EEPROM的基本操作幾乎是完全一樣的
CS的時序很重要的
這是一個寫入函數,你參考一下

應該不是邏輯的問題,我試了下,在“下載程序”后,這個引腳讀高電平根本讀不出來。在仿真的時候可以讀出高電平。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1