我有一个嵌入式SBC(主)和一个基于8051的RF模块,具有32kbs的内部ROM。我正在使用SPI总线来访问内部ROM。当我使用SPI总线从主站向从站发送一些数据时,我能够在MOSI线上看到一些数据,在那之后,我需要从从站获得一些响应。我不确定数据是否在flash ROM的00,01,02,03地址上正确写入。我期待MISO线上的一些数据,但我没有得到任何东西。我怀疑这四个字节是否写得正确我的flash ROM是否有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",);
}
我想从缓冲区读取我的第二个字节。请告诉我我在做什么? 而且我需要让我的地址不断变化,我想在第零个地址上写第一个字节,依此类推。
此致 拉维
答案 0 :(得分:0)
我对您的特定应用程序并不熟悉,所以当您在设备库中调用“write”和“read”时,我真的不知道会发生什么。但是,从纯C / C ++的角度来看,我注意到了一些可能需要注意或可能不需要注意的事情。据我所知,你想通过SPI总线将4个字节的数据写入内存的前4个字节。在你的写循环中,我看到了几件事。
首先,循环4次,每次写4个字节。这总共是16个。另外,当你写作时,我看不到“地址”在哪里发挥作用。我注意到你正在传递一个uint *数组的地址“value”数组。 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总线。所以我希望这会有所帮助。