This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/DRA722: Configuring a GPIO interrupt on IPU1 (running TI-RTOS) creates an interrupt error on MPU (running Linux)

Part Number: DRA722

Tool/software: Linux

I have been struggling for weeks trying to get GPIO interrupts to work on the IPU (using TI-RTOS and the PDK GPIO driver). I've just now gotten it to work with the following code (non-relevant portions omitted for brevity):

GPIO_v1_hwAttrs_list GPIO_v1_hwAttrs = {
...
    {
        (CSL_IPU_GPIO5_REGS + Du32Ipu_IOMMU_Offset),
        49,
        0,
        CSL_XBAR_GPIO5_IRQ_1,
        0
    },
...
};

#define GPIO_RX0BF_CAN3_PIN     (0x0500)    // gpio5_0
#define GPIO_RX1BF_CAN3_PIN     (0x0501)    // gpio5_1

GPIO_PinConfig gpioPinConfigs[GPIO_PIN_COUNT] = { ...
    GPIO_RX0BF_CAN3_PIN | GPIO_CFG_IN_INT_LOW | GPIO_CFG_INPUT,
    GPIO_RX1BF_CAN3_PIN | GPIO_CFG_IN_INT_LOW | GPIO_CFG_INPUT, ...
};

GPIO_CallbackFxn gpioCallbackFunctions[] = { ...
    ExtCanDrv__Can3RXnBF_Isr,   // GPIO_RX0BF_CAN3
    ExtCanDrv__Can3RXnBF_Isr,   // GPIO_RX1BF_CAN3
...
};

GPIO_v1_Config GPIO_v1_config = {
    gpioPinConfigs,
    gpioCallbackFunctions,
    sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),
    sizeof(gpioCallbackFunctions) / sizeof(GPIO_CallbackFxn),
    0x20,
};

from my main() function, before the call to BIOS_start(), I call the following function:

void vGpioDrv_eInitialize(void)
{
    CSL_l4per_cm_core_componentRegs *l4PerCmReg = (CSL_l4per_cm_core_componentRegs *)(CSL_MPU_L4PER_CM_CORE_REGS + Du32Ipu_IOMMU_Offset);
...
    CSL_FINST(l4PerCmReg->CM_L4PER_GPIO5_CLKCTRL_REG, L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO5_CLKCTRL_REG_MODULEMODE, AUTO);

    l4PerCmReg->CM_L4PER_GPIO5_CLKCTRL_REG |= (
        (CM_L4PER_GPIO5_CLKCTRL_OPTFCLKEN_DBCLK_FCLK_EN << CM_L4PER_GPIO5_CLKCTRL_OPTFCLKEN_DBCLK_SHIFT) |
        (CM_L4PER_GPIO5_CLKCTRL_MODULEMODE_AUTO << CM_L4PER_GPIO5_CLKCTRL_MODULEMODE_SHIFT)
                                              );
...
    // RX0BF_CAN3_PIN - gpio5_0
    TU32 ulAddress = (SOC_CORE_PAD_IO_REGISTERS_BASE + Du32Ipu_IOMMU_Offset + CSL_CONTROL_CORE_PAD_IO_PAD_MCASP1_ACLKR); // 0x6A0036AC
    TU32 ulData = (SLEW_CONTROL_SLOW | (((uint32_t) 6) << GPIO_CFG_IO_LSB) | CTRL_CORE_PAD_MUXMODE_GPIO);                // 0x000E000E
    HW_WR_REG32(ulAddress, ulData);

    // RX1BF_CAN3_PIN - gpio5_1
    ulAddress = (SOC_CORE_PAD_IO_REGISTERS_BASE + Du32Ipu_IOMMU_Offset + CSL_CONTROL_CORE_PAD_IO_PAD_MCASP1_FSR);   // 0x6A0036B0
    ulData = (SLEW_CONTROL_SLOW | (((uint32_t) 6) << GPIO_CFG_IO_LSB) | CTRL_CORE_PAD_MUXMODE_GPIO);                // 0x000E000E
    HW_WR_REG32(ulAddress, ulData);
...
    GPIO_init();

    IntXbar_connectIRQ(49, CSL_XBAR_GPIO5_IRQ_1);

    GPIO_enableInt(GPIO_RX0BF_CAN3);
    GPIO_enableInt(GPIO_RX1BF_CAN3);
}

After this, my ISR is called when an interrupt is received, so it looks like things are working well on the IPU. However, when the system boots, I get the following error on the Linux console:


[   17.206769] irq 168, desc: ef1d0d80, depth: 1, count: 0, unhandled: 0
[   17.213246] ->handle_irq():  c00810e8, handle_bad_irq+0x0/0x280
[   17.219204] ->irq_data.chip(): ef1d0c10, 0xef1d0c10
[   17.224106] ->action():   (null)
[   17.227342]    IRQ_NOPROBE set
[   17.230403] unexpected IRQ trap at vector a8

I can see the following interrupts by typing cat /proc/interrupts:


           CPU0       
 16:          0      CBAR  32 Level     gp_timer
 17:          0       GIC  29 Edge      arch_timer
 18:     392273       GIC  30 Edge      arch_timer
 22:          0      CBAR   4 Level     l3-dbg-irq
 23:          0     WUGEN  10 Level     l3-app-irq
 25:          1      CBAR 121 Level     talert
 27:         55      CBAR   8 Level     omap-dma-engine
 30:       5072      CBAR 361 Level     43300000.edma_ccint
 32:          1      CBAR 359 Level     43300000.edma_ccerrint
 35:          0      CBAR  24 Level     4ae10000.gpio
 68:          0      CBAR  25 Level     48055000.gpio
101:          0      CBAR  26 Level     48057000.gpio
134:    1119903      CBAR  27 Level     48059000.gpio
139:    1119903  48059000.gpio   4 Level     egalax_i2c
167:          1      CBAR  28 Level     4805b000.gpio
168:          1  4805b000.gpio   0 Edge    
200:          0      CBAR  29 Level     4805d000.gpio
233:          0      CBAR  30 Level     48051000.gpio
266:          0      CBAR 116 Level     48053000.gpio
299:       4595      CBAR  67 Level     4806a000.serial
301:        401      CBAR  69 Level     48020000.serial
302:          0      CBAR 100 Level     48066000.serial
306:      20332      CBAR 251 Level     mbox_ipu1_ipc3x
310:         32      CBAR 255 Level     mbox_ipu2_ipc3x
328:         11      CBAR 108 Level     omap_dmm_irq_handler
329:      26233      CBAR  16 Level     SGX ISR
331:        379      CBAR  51 Level     48070000.i2c
332:       1215      CBAR  56 Level     48060000.i2c
333:          0      CBAR  57 Level     4807a000.i2c
334:         13      CBAR  78 Level     mmc0
335:       4977      CBAR  81 Level     mmc1
336:          0      CBAR 395 Level     58882000.mmu
337:          0      CBAR 396 Level     55082000.mmu
341:          5      CBAR  72 Level     dwc3-omap
342:          5      CBAR  87 Level     dwc3-omap
347:         20      CBAR  46 Level     4b101000.sham
348:          0      CBAR  47 Level     48090000.rng
350:       7542      CBAR  20 Level     OMAP DISPC
415:          0      CBAR   2 Edge      tps65917
416:          0   pinctrl 584 Edge      48020000.serial
417:       3416      CBAR  71 Level     xhci-hcd:usb1
418:          0      CBAR  73 Level     xhci-hcd:usb3
IPI0:          0  CPU wakeup interrupts
IPI1:          0  Timer broadcast interrupts
IPI2:          0  Rescheduling interrupts
IPI3:          0  Function call interrupts
IPI4:          0  Single function call interrupts
IPI5:          0  CPU stop interrupts
IPI6:          0  IRQ work interrupts
IPI7:          0  completion interrupts
Err:          1

If I don't run the above IPU code, then interrupt 168 does not exist, and I get no errors on the console. It appears that configuring the interrupt on the IPU is somehow also creating an interrupt on the MPU, but one with no handler. Any ideas?

Thanks,

Mike

  • Hi Michael,
    I'm sorry I didn' review your code in detail, but on top of my head is that the GPIO5 interrupt signal is routed to MPU and DSP by default (after reset). Perhaps configurning Crossbar to not route GPIO5 to MPU may help?

    Regards,
    Stan
  • Thanks Stan,

    What I really don't understand is that interrupt 167 shows Linux with an IRQ to crossbar 28, which is the GPIO5 IRQ, and I'm assuming there's an ISR for that interrupt, but after I do my configuration on the M4, interrupt 168 appears in the list, apparently without a handler. I'd really like to understand what is creating this new interrupt, but meanwhile your solution will probably work.

    Thanks again,

       Mike

  • More follow-up: I implemented Stan's suggestion, and manually removed interrupt 28 (GPIO5_IRQ_1) from the MPU crossbar as follows in the Linux console:
    omapconf write 0x4a002b54 0x001b0000

    After that, I get the interrupts working as hoped in the M4, and no errors on the A15/Linux side.

    Now, we're trying to do the same thing, except as part of the Linux configuration. We've tried to do it by removing the interrupt for GPIO5 in the device tree, but this looks like it ended up having an unwanted side-effect of disabling GPIO7 outputs, that I'm using to bit-bang a SPI interface.

    diff -rNuw kernel-source/arch/arm/boot/dts/dra7.dtsi
    kernel-source-rem-int28/arch/arm/boot/dts/dra
    --- kernel-source/arch/arm/boot/dts/dra7.dtsi 2017-09-25
    08:55:02.814964991 -0400
    +++ kernel-source-rem-int28/arch/arm/boot/dts/dra7.dtsi 2017-09-25
    10:32:55.732056507 -0400
    @@ -548,12 +548,9 @@
    gpio5: gpio@4805b000 {
         compatible = "ti,omap4-gpio";
         reg = <0x4805b000 0x200>;
    -    interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
         ti,hwmods = "gpio5";
         gpio-controller;
         #gpio-cells = <2>;
    -    interrupt-controller;
    -    #interrupt-cells = <2>;
    };

    def for gpio7

    gpio7: gpio@48051000 {
         compatible = "ti,omap4-gpio";
         reg = <0x48051000 0x200>;
         interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
         ti,hwmods = "gpio7";
         gpio-controller;
         #gpio-cells = <2>;
         interrupt-controller;
         #interrupt-cells = <2>;
    };

    def for SPI1
    mcspi1: spi@48098000 {
         compatible = "ti,omap4-mcspi";
         reg = <0x48098000 0x200>;
         interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
         #address-cells = <1>;
         #size-cells = <0>;
         ti,hwmods = "mcspi1";
         ti,spi-num-cs = <4>;
         dmas = <&sdma_xbar 35>,
                <&sdma_xbar 36>,
                <&sdma_xbar 37>,
                <&sdma_xbar 38>,
                <&sdma_xbar 39>,
                <&sdma_xbar 40>,
                <&sdma_xbar 41>,
                <&sdma_xbar 42>;
         dma-names = "tx0", "rx0", "tx1", "rx1",
                     "tx2", "rx2", "tx3", "rx3";
         status = "disabled";
    };

    diff of the two device trees disassembled :

    / {
    #address-cells = <0x00000002>;
    @@ -2846,12 +2846,9 @@
    gpio@4805b000 {
         compatible = "ti,omap4-gpio";
         reg = <0x4805b000 0x00000200>;
    -    interrupts = <0x00000000 0x0000001c 0x00000004>;
         ti,hwmods = "gpio5";
         gpio-controller;
         #gpio-cells = <0x00000002>;
    -    interrupt-controller;
    -    #interrupt-cells = <0x00000002>;
    };
    gpio@4805d000 {
         compatible = "ti,omap4-gpio";

    Any ideas how to disable the GPIO5 interrupt in Linux, without any side-effects?

    Thanks,
    Mike

  • Hi Mike,

    which version is your SDK/kernel?

    Thanks,
    Yordan
  • Hi Yordan,
    We're using the Automotive SDK v3.0.2, modified for our custom board, along with SYS/BIOS 6.46.4.53 and am57xx PDK 1.0.6
  • Hi Michael,

    I have forwarded your question to a kernel expert to comment on necessary dts changes.

    Regards,
    Yordan
  • Hi Mike,

    Thanks for the details you have provided.
    It is always recommended to have a *clear* partitioning of resources across Linux and BIOS
    If you are using a device (e.g. GPIO 5 or GPIO7) in BIOS, make sure that it is completely disabled from Linux.
    This way, there won't be two drivers handling the device and IRQs.

    Refer to this for how you can completely disable peripherals from Linux
    git.ti.com/.../dra7-evm-infoadas.dts

    You can add DISABLE_COMPLETE(gpio5) and for gpio7 to disable them.
    This won't cause any issue with BIOS behavior


    Regards,
    Nikhil D
  • Thanks for the information Nikhil,
    I'll look at what you sent, and hopefully it will help. I am wondering though, if my board schematic is such that I need to access some pins of GPIO5 from BIOS in the M4, and other pins of GPIO5 from Linux on the A15, is that possible, or not?
  • We are using some devices on GPIO5 but none as GPIO

    UART3 which is used for debug shares pins with gpio5_18 and gpio5_19
    gpio5_15, gpio5_16 and gpio5_20 to gpio5_31 share pins with the ethernet port
    gpio5_17 is unused

    For GPIO7 I have not set the GPIO used in TI-RTOS in u-boot, I was expecting the SPI port to be used with the CS and set it as such, is that a problem in TI-RTOS? Michael had some issues with the CS so he is using GPIO instead.

    On Linux I need to use some GPIO7 interrupts for the accelerometer and have some GPIO7 for the wifi module.

    Michel Catudal
    ACTIA Corp
  • Nikhil,
    My setup is using gpio5_0 and gpio5_1 as interrupt inputs from the external CAN device (MCP25625). I'm currently bit-banging the SPI interface using gpio7_10 (chip select), gpio7_7 (clock), gpio7_8 (MISO), and gpio7_9 (MOSI). This configuration has worked so far, once I did the manual call from the M4 to disable the IRQ crossbar for GPIO5 in the MPU.

    When I tried a new device tree that disables GPIO5 as you suggested, I no longer get the exception I used to get (without disabling the MPU crossbar from the IPU), but my SPI bus is no longer working because the chip select, clock, and MOSI lines are just staying low all the time.

    Do you have any idea why this is, and how to fix it?

    Thanks again,
    Mike
  • Hi Mike,
    Based on your description, it looks like you are using both GPIO5 and GPIO7 from BIOS
    Please clarify who is using what

    If that's the case, simply turn them off from Linux by disabling them from device tree as mentioned above.
    Note that you won't be able to use ANY of the pin from Linux this way.

    If you are planning to use few pins of the same GPIO from BIOS and few from Linux, then its a bad design choice.
    GPIO5 and GPIO7 are not related at all. So ideally one shall not affect other.


    Regards,
    Nikhil D
  • Hi Nikhil,
    Yes, you are correct that we are using both GPIO5 and GPIO7 from BIOS, but we are only using GPIO interrupts on GPIO5. GPIO7 is also used by Linux as indicated by Michel, so we can't just turn that off. Is there a reason that turning off GPIO5 is also disabling GPIO7, because as you say, I wouldn't expect one to affect the other.

    Thanks,
    Mike
  • Mike,

    Your partitioning is not right.
    You cannot have both BIOS and Linux driver use the same GPIO module.
    Most likely you are facing issues because two drivers are trying to control the same GPIO7 module.

    Regards,
    Nikhil D
  • Nikhil,
    Here's what I see:
    1) My initial problem was that when I enabled a GPIO interrupt for the M4, that was causing an unhandled interrupt exception on the A15, which doesn't make sense because the IRQ crossbar for the IPU should be completely distinct from the IRQ crossbar for the MPU.
    2) The "solution" to issue #1 was to disable GPIO5 in the Linux device tree. While that fixed the unhandled exception I was getting on the A15, it also somehow disabled the ability for the M4 to control pins on GPIO7, which also doesn't make sense because GPIO5 and GPIO7 should be totally separate.
    3) The "solution" presented for issue #2 is to partition our hardware design so that the M4 and A15 aren't sharing any GPIO ports. But again, this doesn't make sense because we had no issue sharing ports until I enable a GPIO interrupt. In addition, if we need to partition the ports at the hardware level based on which core is going to control them at the software level, we're probably going to also revise the use of at least 4 other ports. Is this a documented design restriction?

    From my perspective, it still looks like there's an issue in the micro or kernel, and the workarounds we've tried so far haven't been able to overcome it. What else can we look at?

    Thanks,
    Mike
  • Hello Mike, Sorry for delayed responce. I believe that the reason you are not able to use GPIO7 from BIOS is because the device partitioning is still not correct. Please check if the BIOS side is making sure that the clock for GPIO7 is enabled. Most likely GPIO5 and GPIO7 clocks might be derived from a common clock. Turning off from Linux would mean that the clocks are not getting enabled causing the failure Nikhil D
  • Nikhil,

    I am enabling the clocks for GPIO2, 5, and 7 as follows:

    //                case GPIO2:
                        CSL_FINST(l4PerCmReg->CM_L4PER_GPIO2_CLKCTRL_REG,
                                  L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO2_CLKCTRL_REG_MODULEMODE, AUTO);
    
                        l4PerCmReg->CM_L4PER_GPIO2_CLKCTRL_REG |= (
                                (CM_L4PER_GPIO2_CLKCTRL_OPTFCLKEN_DBCLK_FCLK_EN << CM_L4PER_GPIO2_CLKCTRL_OPTFCLKEN_DBCLK_SHIFT) |
                                (CM_L4PER_GPIO2_CLKCTRL_MODULEMODE_AUTO << CM_L4PER_GPIO2_CLKCTRL_MODULEMODE_SHIFT));
    
    //                case GPIO5:
                        CSL_FINST(l4PerCmReg->CM_L4PER_GPIO5_CLKCTRL_REG,
                                  L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO5_CLKCTRL_REG_MODULEMODE, AUTO);
    
                        l4PerCmReg->CM_L4PER_GPIO5_CLKCTRL_REG |= (
                                (CM_L4PER_GPIO5_CLKCTRL_OPTFCLKEN_DBCLK_FCLK_EN << CM_L4PER_GPIO5_CLKCTRL_OPTFCLKEN_DBCLK_SHIFT) |
                                (CM_L4PER_GPIO5_CLKCTRL_MODULEMODE_AUTO << CM_L4PER_GPIO5_CLKCTRL_MODULEMODE_SHIFT));
    
    //                case GPIO7:
                        CSL_FINST(l4PerCmReg->CM_L4PER_GPIO7_CLKCTRL_REG,
                            L4PER_CM_CORE_COMPONENT_CM_L4PER_GPIO7_CLKCTRL_REG_MODULEMODE, AUTO);
    
                        l4PerCmReg->CM_L4PER_GPIO7_CLKCTRL_REG |= (
                            (CM_L4PER_GPIO7_CLKCTRL_OPTFCLKEN_DBCLK_FCLK_EN << CM_L4PER_GPIO7_CLKCTRL_OPTFCLKEN_DBCLK_SHIFT) |
                            (CM_L4PER_GPIO7_CLKCTRL_MODULEMODE_AUTO << CM_L4PER_GPIO7_CLKCTRL_MODULEMODE_SHIFT));
    

    This is from the BIOS side, and it's what worked before I disabled GPIO5 in the device tree. Is there a way for you to check if the clocks for GPIO5 and 7 are derived from a common clock? If they are, then what is a solution for my current problem?

    Thanks,

       Mike

  • HI Mike,

    I see that the GPIO5 and 7 are derived from sys_32k_ck but it will not be clock gated.
    So if BIOS only turns on clock for GPIO7, that should be sufficient.
    Can you connect CCS and check if the GPIO accessibility is fine from M4
    Also check if the pinmux values are all intact (which might explain "updates not being reflected outside chip")


    Regards,
    Nikhil D
  • Thanks Nikhil,
    When you say "check GPIO accessiblity from M4", do you want me to check if I can drive the GPIO lines from the M4? I can check it again, but the last time I tested with GPIO5 disabled in the device tree, the M4 was unable to drive the GPIO7 lines.

    What should I look for to check if the pinmux values are all intact?

    Also, we use UART1 of the device to communicate (from Linux, as /dev/ttyS0) with an STM32. I was told yesterday that when GPIO5 is disabled in the device tree, we are not able to communicate with the STM32, but communication is restored once GPIO5 is put back in the device tree. Based on that, I don't know that we'll be able to disable GPIO5, and we'll have to go back to the problem of the unhandled interrupt in the MPU.
  • To communicate with the STM32 for reflashing I need access to both boot pins and reset pins of the STM32. This doesn't imply that I cannot use /dev/ttyS0, the STM32 cannot be put into the bootloader mode if I cannot control those two pins. The boot pin is accessed using gpio2_22 and the reset pin using gpio6_28 with a mosfet. The signal has to be inverted on the reset so when the DRA726 is turned off it won't force the STM32 on reset.
    The UART1 used shares pins with gpio7_22 and gpio7_23.

    Michel
  • This thread is 3 years old now, but one of my customers ran into this same issue with seeing spurious Linux interrupts related to GPIO being used on other CPU's.  We found a different solution, so I wanted to share.  As background, this GPIO peripheral goes back at least as far as OMAP2 (i.e. 10+ years ago), and in those devices GPIO IRQ_1 was always routed to the ARM while IRQ_2 was always routed to the DSP.  It occurred to me that the issue might relate to the fact that the DSP/IPU is attempting to use IRQ_1 which is what the ARM traditionally uses.  My customer modified the RTOS driver to program the IRQ_2-related registers instead of IRQ_1, and correspondingly updated the crossbar to route IRQ_2 to the DSP.  Those changes resolved the spurious Linux interrupts.

    Michael/Michel -- sorry I wasn't able to provide you this data point 3 years ago!  Hopefully this helps a few other people.

  • Brad,

    Michael is no longer working at ACTIA Corp.

    Sorry for the delay, I have been working on other issues and hadn't got to this part yet. I am working from home, I have to watch out as not to work too many hours, that is the issue here when working from home. The funny thing is that I can do more work even with only 8 hours days, not being bothered as frequently. My cats are the only ones that would disturb me when they are hungry or want attention.

    Due to some serious issues with our external CAN which were only partially working I chose to revise the code. For  message everything is done thru messaging except broadcasting which sometime stops working when using external CAN with a bit too heavy loads. I am working on using circular buffers  cmem and limit the messaging. I am also looking at getting the SPI port to work instead of bit banging.

    I have the internal CAN on Linux and only the external 3 CAN ports on the Cortex M4.  I experimented on Linux for the Microchip device but it can't handle heavy load, almost locks the processor. The issue has to do with the way the hardware is done. We have a STM32 co-processor and the electronic design team has noticed that when the DRA726 is turned off and the STM32 on with the interrupt pin activated on the DRA726, the DRA726 gets extremely hot. So it was decided to disconnect that line. The problem with Linux is that with no interrupt there is no way to get the kernel module to recognize the devices.

    To go around that I rewrote the kernel module to use the other interrupts pins that can be enabled or disabled using a SPI message. That didn't work out too well so I wrote a kernel module that polls. It works perfectly for transmission but for reception I may miss many frames and if broadcasting too many messages it freezes the processor. I could disable the error message that do that but that would not get me to receive the missing messages.

    Si I am going back partly to the M4. I keep the internal CAN on Linux where it works without issues and dedicate the Cortex M4 to handle the Microchip devices. In Michael's code he only used one Microchip device, the 3rd one was not populated and the 2nd one didn't always work. When the external CAN were misbehaving we would lose access to even the internal CAN ports. This has not been an issue so far with our current customers as they only use the internal CAN ports.

    Does the IPU messaging work the same from a Linux kernel module? I would like to modify my kernel module to get  the external CAN to and from the Cortex M4 so I can use socket can just like I do for the internal CAN.

    To create the code I am doing things a bit differently, not using eclipse. For the IPU1 I use the dra72x TI RTOS SDK and not the am57xx one and for the host I created my own Makefile.am and configure.ac files and use the SDK that I created with my yocto (poky).  I am still at kernel 4.4.45 but will eventually move to 4.19.73. I do have a working evironment with the new kernel but for our current customer I use the old one which is based on what TI uses for thei sdk 3.04 wtih the exception that I use poky with the recipes I need from the TI yocto.

    If I have issues I can't figure out I will open an other message. You could close this one for now. I will save the info you are giving me for later review.

    Thanks

    Michel Catudal

    ACTIA Corp

  • Michel Catudal said:
    We have a STM32 co-processor and the electronic design team has noticed that when the DRA726 is turned off and the STM32 on with the interrupt pin activated on the DRA726, the DRA726 gets extremely hot.

    You are damaging the device.  Please reference footnote 5 of the Absolute Max Ratings:

    (5) The maximum valid input voltage on an IO pin cannot exceed 0.3 volts when the supply powering the IO is turned off.

    You need a buffer to protect the processor pin.

  • Brad,

    The pin has been disconnected in newer releases of the build. This problem is why I am reluctant to even use the interrupts that can be enabled in software, just in case the STM32 would turn the DRA726 off before the DRA726 had time to tell the microchip devices to turn them off.

    Is that also an issue with the UART? The STM32 never initiate communication with the DRA726.

    John is no longer working at ACTIA. You may want to send a message to Jed. If you don't have his Email address, just send me an Email and I will forward it to Jed.

    Jed is responsible for the electronics design, we may have a hardware update sometimes in 2021. For now I just need to find ways around the problems.

    Michel Catudal

    ACTIA Corp

  • Brad,

    I double checked my STM32 code and the interrupt pins would be the only ones that would cause problems.

    The output lines from the MCP25625 that are directly connected to the DRA726 are MPU_CAN_SO, RX0BF_CANx and RX1BF_CANx. The jumper for the main interrupts are not populated. They were removed after we noticed that the processor was getting too hot.

    As long as I have those lines turned off when I go low speed and turn the processor off I should be safe. Since clk, si are low when power is off there shouldn't be any activity on the so pins. As for the huart it is turned off then.

    To be safe I probably need to stick with polling. Since those three devices are the only ones that will be handled in the Cortex M4 that should be good enough.

    Michel Catudal

    ACTIA Corp





    ,