MQX SPI

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决
2,171 次查看
MQXuser
Contributor III

Is there an instruction to write and read the output of a device at the same time?

Because if I use the instructions separately I miss the data I am trying to get. I am using MQX 3.3.

 

Regards

0 项奖励
回复
1 解答
1,063 次查看
PetrM
Senior Contributor I

Yes, there are 2 ways:

 

1) MQX 3.3 - Open SPI driver with full duplex flag and everytime you call read it will send the byte from given buffer and receive byte into same position in the buffer:

 

   spifd = fopen ("spi0:", (pointer)(SPI_FLAG_FULL_DUPLEX))

   buffer[0] = BYTE_TRANSMITTED;

   result = fread (buffer, 1, 1, spifd);

   // buffer[0] == BYTE_RECEIVED;

 

2) MQX 3.4 - Use ioctl, which always works regardless on opening mode:

 

   SPI_READ_WRITE_STRUCT  rw;
   rw.BUFFER_LENGTH = 10;
   rw.WRITE_BUFFER = (char_ptr)send_buffer;
   rw.READ_BUFFER = (char_ptr)recv_buffer;
   ioctl (spifd, IO_IOCTL_SPI_READ_WRITE, &rw);

PetrM

 

在原帖中查看解决方案

0 项奖励
回复
1 回复
1,064 次查看
PetrM
Senior Contributor I

Yes, there are 2 ways:

 

1) MQX 3.3 - Open SPI driver with full duplex flag and everytime you call read it will send the byte from given buffer and receive byte into same position in the buffer:

 

   spifd = fopen ("spi0:", (pointer)(SPI_FLAG_FULL_DUPLEX))

   buffer[0] = BYTE_TRANSMITTED;

   result = fread (buffer, 1, 1, spifd);

   // buffer[0] == BYTE_RECEIVED;

 

2) MQX 3.4 - Use ioctl, which always works regardless on opening mode:

 

   SPI_READ_WRITE_STRUCT  rw;
   rw.BUFFER_LENGTH = 10;
   rw.WRITE_BUFFER = (char_ptr)send_buffer;
   rw.READ_BUFFER = (char_ptr)recv_buffer;
   ioctl (spifd, IO_IOCTL_SPI_READ_WRITE, &rw);

PetrM

 

0 项奖励
回复