You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@nuttx.apache.org by Bernd Walter <ti...@cicely7.cicely.de> on 2022/11/06 11:38:04 UTC
SPI usage questions
While looking into the mcp2515 driver I noticed something unexpected.
In mcp2515_instantiate() it does the follofing:
SPI_SETFREQUENCY(config->spi, CONFIG_MCP2515_SPI_SCK_FREQUENCY);
SPI_SETMODE(config->spi, MCP2515_SPI_MODE);
SPI_SETBITS(config->spi, 8);
SPI_HWFEATURES(config->spi, 0);
In mcp2515_read_2regs() and all the other transfer functions it does the
following:
SPI_LOCK(priv->config->spi, true);
SPI_SELECT(priv->config->spi, SPIDEV_CANBUS(0), true);
SPI_EXCHANGE(priv->config->spi, priv->spi_txbuf, priv->spi_rxbuf, 4);
SPI_SELECT(priv->config->spi, SPIDEV_CANBUS(0), false);
SPI_LOCK(priv->config->spi, false);
What puzzles me is that all he mode settings are done without locking
the SPI and only once during the init phase.
I would have expected it to be done in each and every transfer within
the LOCK region.
When I look into the e.g. RP2040 code then the config->spi doesn't look
to be unique for the single mcp2515 instance.
--
B.Walter <be...@bwct.de> https://www.bwct.de
Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.