2012-12-05 3 views
1

저는 내장 된 SBC (마스터)와 슬레이브를 가지고 있는데, 32KB의 내부 ROM을 가진 8051 기반 RF 모듈입니다. SPI 버스를 사용하여 SPI 버스를 사용하고 있습니다. SPI 버스를 사용하여 마스터에서 슬레이브로 일부 데이터를 보내고 있습니다. MOSI 라인의 일부 데이터를 볼 수 있으며 데이터 이후에는 슬레이브에서 응답해야합니다. 나는 데이터가 플래시 ROM의 00,01,02,03 주소에 적절히 쓰여지는 것을 확신하지 않는다. MISO 라인의 일부 데이터도 기대하고 있지만, 아무것도 얻지 못한다. 4 바이트가 제대로 쓰여졌는지 의심 스럽다. 내 플래시 ROM을 시작하는 4 개의 주소 또는하지 ?? 참조 용 코드를 추가 했으므로 내가 뭘 잘못하고 있는지 알려주세요.C 프로그래밍에서 약간의 지연 후 4 바이트를 쓰고 2 바이트를 읽는 방법?

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",); 
    } 

버퍼에서 두 번째 바이트를 읽고 싶습니다. 무엇이 잘못되었는지 알고 싶습니다. 그리고 또한 내 주소가 계속 바뀌어야하고, 첫 번째 바이트를 0 번째 주소 등에 쓰고 싶습니다. 그래서 난 정말 당신이 "쓰기"를 호출 할 때 발생하고 장치의 라이브러리에서 "읽기"모르는 내가 특정 응용 프로그램과 정말 익숙하지 않다

감사합니다, 라비

답변

0

. 그러나 순수한 C/C++ 관점에서주의를 요할 수도 있고하지 않을 수도있는 몇 가지 사실을 발견했습니다. SPI 버스를 통해 처음 4 바이트의 메모리에 4 바이트의 데이터를 쓰고 싶다는 것을 이해했습니다. 쓰기 루프에는 내가 본 몇 가지가 있습니다.

먼저 루프를 4 번 반복하고 매번 4 바이트를 씁니다. 총 16 개입니다. 또한 필자가 글을 쓸 때 "주소"가 어디에서 나오는지도 모르겠다. "value"의 배열이 uint * 배열의 주소를 전달하고있는 것으로 나타났습니다. write 함수는 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 버스에서 읽기/쓰기 전에 파일 디스크립터를 사용하지 않았습니다. 그래서 나는 이것이 도움이되기를 바랍니다.

관련 문제