2012-12-05 39 views
1

我有一個嵌入式SBC(主)和從屬基於8051的RF模塊具有32kbs的內部ROM。我使用SPI總線訪問內部ROM。當我使用SPI總線將一些數據從主設備發送到從設備時,我能夠在MOSI線上看到一些數據,然後我需要從設備獲得一些響應。我不確定數據是否寫在閃存ROM的00,01,02,03地址上。我也期待MISO行上有一些數據,但我沒有收到任何東西。我懷疑這四個字節是否正確寫入我的閃存ROM啓動4個地址或不?我已經添加了供您參考的代碼,請讓我知道我在做什麼錯誤。如何在C編程中延遲一段時間後寫入4個字節並讀取第二個字節?

typedef unsigned char uint8; 

    void run_test(int fd) 
    { 
     int i; 
     uint8 buffer[20]; 
     //int size,l,size1; 
     uint8 *value[4] = {0xAC,0x53,0xAA,0x55}; 
     uint8 address=0x0000; 

     /*Writing 4 bytes*/ 

     for(i=0;i<4;i++) 
     { 
      printf("address:%.4x \t value : %2X\n",address,value[i]); 
     write(fd,&value,4); 
     address++; 
     } 
    /*Reading the 2nd byte*/ 

    read (fd, buffer, sizeof (buffer)); 
    printf("%2X\n",); 
    } 

我想讀一下我從buffer.Please第二個字節讓我知道什麼是錯的我在做什麼? 此外,我需要讓我的地址不斷變化,並且我想在第零個地址上寫第一個字節,依此類推。

問候, 拉維

回答

0

我不是很熟悉你的特定的應用程序,所以我真的不知道,當你調用「寫」發生了什麼,並在設備的圖書館「讀」。然而,從純C/C++的角度來看,我注意到了一些可能需要或不需要注意的事情。據我瞭解,您想通過SPI總線將4個字節的數據寫入內存的前4個字節。在你的寫循環中,有一些我看到的東西。

首先,你循環4次,每次寫入4個字節。總共16個。另外,當你寫作時,我看不出「地址」在哪裏起作用。我注意到你正在傳遞一個uint *數組地址的「value」數組。寫函數需要一個void *,並且你基本上傳入一個void ***。這意味着你絕對不會寫入你聲明的值數組中的字節。

所以我看到它的方式,你可以一次寫入4個字節,一次一個字節或4個字節。

int i; 
    uint8 value[4] = { 0xAC, 0x53, 0xAA, 0x55 }; 
    uint8 address = 0; 

    // Writing 4 bytes METHOD 1 
    for (i = 0; i < 4; ++i) 
    { 
     write(fd, &(value[i]), 1); 
    } 

    // Writing 4 bytes METHOD 2 
    write(fd, value, 4); 

而且您可以像這樣從緩衝區中打印第二個字節。

uint8 buffer[20]; 
    read(fd, buffer, sizeof(buffer)); 
    printf("%2X\n", buffer[1]); 

我有一些微控制器工作,並沒有使用文件描述符之前閱讀的SPI總線/寫。所以我希望這有助於。

相關問題