Я пытаюсь получить доступ к NAND flash через spidev.Я хочу отправить два байта данных, который 0x9F 0x00, который запрашивает идентификатор устройства.В то время как я вижу 0x9f, я не вижу второй байт 0x00 на осциллографе.Более того, на осциллографе сработало только 8 тактовых импульсов
Похоже, что нельзя отправить более одного байта, что может быть не так?
Вот мой короткий код:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc, char **argv)
{
char *name;
int fd;
struct spi_ioc_transfer xfer;
unsigned char buf_tx[32], buf_rx[32], *bp;
int len, status;
name = argv[1];
fd = open(name, O_RDWR);
if (fd < 0) {
perror("open");
return 1;
}
//memset(&xfer, 0, sizeof(struct spi_ioc_transfer));
memset(buf_tx, 0, sizeof buf_tx);
memset(buf_rx, 0, sizeof buf_rx);
len = sizeof buf_rx;
printf("DBG#: 4\n");
/*
* Send a GetID command
*/
buf_tx[0] = 0x9f;
buf_tx[1] = 0x00;
xfer.tx_buf = (unsigned long)buf_tx;
xfer.len = 2;
xfer.rx_buf = (unsigned long)buf_rx;
xfer.speed_hz = 100000000;
status = ioctl(fd, SPI_IOC_MESSAGE(1), xfer);
if (status < 0) {
perror("SPI_IOC_MESSAGE");
return -1;
}
printf("response(%d): ", status);
for (bp = buf_rx; len; len--)
printf("%02x ", *bp++);
printf("\n");
return 0;
}
Вывод:
response(2): ff ff 00 00 00 00 00 00 00 00 00... (32 times total)