Thanks Petro!

This solve one part of the problem: I don't receive any crash now.

There is another thinks tht is not clear to me: the macro SPIDEV_ID(spitool->devtype, spitool->csn) is defined as

#define SPIDEV_ID(type,index) ((((uint32_t)(type)  & 0xffff) << 16) | \
                                ((uint32_t)(index) & 0xffff))

in the file include/nuttx/spi/spi.h.

This should means that calling it with the parameters spitool->devtype=0x23 and spitool->csn=0 should give 0x230000 as return value and not 0x170000...

Best regards

Roberto


On 3/7/22 16:22, Petro Karashchenko wrote:
Hello Roberto,

I think that the problem is in the line's: "stm32_gpiowrite(g_spigpio[devid], !selected);". Those should be "stm32_gpiowrite(g_spigpio[SPIDEVID_INDEX(devid)], !selected);".

Please try to see if that helps.

Best regards,
Petro

пн, 7 бер. 2022 р. о 12:46 Roberto Bucher <roberto.buc...@supsi.ch> пише:

    I reached to move a little forward by analyzing the SPI on the
    nucleo-144 STM32F7 board, and I found out that the problem is now
    in the calling of SPI_SELECT in the
    nuttx/drivers/spi/spi_transfer.c and the spi_transfer function.

    This are the values in the seq structure before launching the
    SPI_SELECT command.

    nsh> spi bus
     BUS   EXISTS?
    Bus 0: NO
    Bus 1: NO
    Bus 2: YES
    Bus 3: NO
    nsh> spi exch -b2 -x4 aabbccdd
    Sending:    AA BB CC DD
    seq -> dev: 0x170000, mode: 3, nbits: 8, ntrans: 1, freq: 4000000
    Received:    FF FF FF FF

    To avoid the dump error I modified the seq->dev from 0x170000 to
    0x0004...
    It seems that the seq->dev value is not correct...

    Best regards

    Roberto

    On 3/6/22 13:47, Roberto Bucher wrote:
    Thanks Petro

    I've modified the nucleo-144/src/stm32_spi.c file by simply adding:

    struct spi_dev_s *g_spiX;

    and by adding

    spi_register(g_spiX, X);

    in the

    where X is the spi device number (in my example spi2)

    in the shell the /dev/spi2 is available.

    Best regards

    Roberto

    On 3/6/22 12:49, Petro Karashchenko wrote:
    Hello Roberto,

    I'm asking this because I examined nucleo-144 board source code
    and currently I do not see a "spi_register" call in board init
    files. So I assume that you have some modified code and it is
    very hard to make any conclusions while not seeing the code.

    Best regards,
    Petro

    нд, 6 бер. 2022 р. о 13:40 Petro Karashchenko
    <petro.karashche...@gmail.com> пише:

        Hello Roberto,

        It would be good if you can dump assembly that is generated.
        What I see is that "intspi_register(FAR structspi_dev_s
        *spi, intbus)", so I'm assuming that R0 should be "spi" and
        R1 should be "bus", but in your dump "R0: 00000001 R1:
        2004e840" those seems to be inverted (00000001 seems to be a
        "bus" and "2004e840" seems to be a "spi" pointer). The
        assembly code will show light on the dump that you provided.
        As an alternative you can provide the defconfig that you use
        if you are not using a custom board.

        Best regards,
        Petro


        нд, 6 бер. 2022 р. о 10:54 Roberto Bucher
        <roberto.buc...@supsi.ch> пише:

            When I enable some dubug configs



            I get the following error by enter in the serial shell:

            sert: Assertion failed at file:spi/spi_driver.c line: 358
            arm_registerdump: R0: 00000001 R1: 2004e840 R2:
            40004800  R3: 20010684
            arm_registerdump: R4: 2004e7a0 R5: 00000002 R6:
            2004f370  FP: 20010670
            arm_registerdump: R8: 00000000 SB: 00000000 SL: 00000000
            R11: 00000000
            arm_registerdump: IP: 00000003 SP: 2004f370 LR:
            08005fad  PC: 0800648e
            arm_registerdump: xPSR: 61000000 PRIMASK: 00000000
            CONTROL: 00000004
            arm_registerdump: EXC_RETURN: ffffffe9
            arm_dump_stack: User Stack:

            On the line 358 of spi_driver.c there is this assertion:

              /* Sanity check */

              DEBUGASSERT(spi != NULL && (unsigned)bus < 1000);

            Any Idea?

            Best regards

            Roberto





Reply via email to