sergzaytsev |
|
|
|
|
|
|
|
Пункты: 3694 |
Регистрация: 19.07.2016 |
|
|
|
Добрый вечер, уважаемые коллеги!
Изделие SK-iMX6S-SODIMM, совместное использование с SK-iMX6-MB-SODIMM.
Настроил ecspi2 для работы с SPI FLASH, пишу/читаю с помощью spi_ioc_transfer вот таким образом (код ниже):
tx[0] = CMD;
tx[1] = Data0;
tx[2] = Data1;
struct spi_ioc_transfer tr = {
tr.tx_buf = (unsigned long)tx,
tr.rx_buf = (unsigned long)rx,
tr.len = ARRAY_SIZE(tx),
tr.delay_usecs = delay,
tr.speed_hz = speed,
tr.bits_per_word = bits,
};
ret = ioctl(sfd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1) qDebug() << "Can't send spi message";
delay = 1, speed = 100кГц, bits = 8.
Осциллографом увидел, что трансферы выполняются медленно, всего 25 трансферов в секунду (период 40мсек), причем сам трансфер выполняется за 300 микросекунд.
Можно ли увеличить производительность канала SPI и как увеличить количество выполненных трансферов в секунду?
Заранее благодарен. |
|
|
|
|
|
sasamy |
|
|
|
|
|
|
|
Пункты: 83552 |
Регистрация: 14.08.2009 |
|
|
|
В ядре 3.14.14 spi работает без DMA поэтому такая низкая пропускная способность. Попробуйте 4.1.15 - там в драйвере spi есть поддержка dma. |
|
|
|
|
|
sergzaytsev |
|
|
|
|
|
|
|
Пункты: 3694 |
Регистрация: 19.07.2016 |
|
|
|
75 байт в секунду - это скорость улитки. Причем я вижу на осциллографе, что трансфер выполняется мгновенно, а потом процессор 40 миллисекунд простаивает, почему - непонятно. Я в бесконечном цикле выполняю один трансфер за другим, больше процессор ничем не занят. |
|
|
|
|
|
sasamy |
|
|
|
|
|
|
|
Пункты: 83552 |
Регистрация: 14.08.2009 |
|
|
|
|
|
|
|
|