Open marcoramirezcastro opened 2 weeks ago
I compiled and ran the MAX32650FTHR example for 1-Wire communication and I was not able to see the 1-Wire line move.
The SDK provides the following function to configure and initialize the 1-Wire pin: MXC_OWM_Init(&owm_cfg);
MXC_OWM_Init(&owm_cfg);
Upon further examination I noticed that it calls the MXC_GPIO_Config(&gpio_cfg_owm) function passing the gpio_cfg_owm structure.
MXC_GPIO_Config(&gpio_cfg_owm)
this structure configures the wrong settings for the MAX32650 device:
const mxc_gpio_cfg_t gpio_cfg_owm = { MXC_GPIO0, (MXC_GPIO_PIN_6 | MXC_GPIO_PIN_7), MXC_GPIO_FUNC_ALT2, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 };
as per the user guide the alternate function should be set to 1 instead of 2.
Other configuration may not be applied as well during setup using MXC_OWM_Init() such as the use of external pull up.
MXC_OWM_Init()
I fixed on my application by running 'MXC_OWM_Init()` first and sequentially reconfiguring the GPIO for the 1-Wire pin on the MAX32650FTHR.
A Working example:
#include <stdio.h> #include "mxc_errors.h" #include "owm.h" #include "gpio.h" #include "mxc_delay.h" int main(void) { int retval; printf("***** 1-Wire Reset Pulse Test *****\n"); printf("This example sends a reset pulse and checks for a presence response\n"); printf("Connect 1-Wire pin, VCC, and GND to the target\n"); printf("\n\n"); // Initialize the OWM configuration structure mxc_owm_cfg_t owm_cfg; owm_cfg.int_pu_en = 1; // Enable internal pull-up owm_cfg.ext_pu_mode = MXC_OWM_EXT_PU_UNUSED; // Ensure external pull-up is off owm_cfg.long_line_mode = 0; // Initialize the OWM module with the specified configuration MXC_OWM_Init(&owm_cfg); // Configure GPIO for 1-Wire mxc_gpio_cfg_t gpio_cfg = { .port = MXC_GPIO1, .mask = (MXC_GPIO_PIN_31), .pad = MXC_GPIO_PAD_STRONG_PULL_UP, // Set pad to pull-up .func = MXC_GPIO_FUNC_ALT1, .vssel = MXC_GPIO_VSSEL_VDDIOH, .drvstr = MXC_GPIO_DRVSTR_3 }; MXC_GPIO_Config(&gpio_cfg); // Send a reset pulse and check for a presence response MXC_Delay(MXC_DELAY_SEC(5)); retval = MXC_OWM_Reset(); if (retval == 0) { printf("No presence pulse detected. No device is present on the bus.\n"); } else if (retval == 1) { printf("Presence pulse detected. Device is present on the bus.\n"); } else { printf("Error during reset pulse. Error code: %d\n", retval); } // Deinitialize the OWM module MXC_OWM_Shutdown(); return 0; }
I compiled and ran the MAX32650FTHR example for 1-Wire communication and I was not able to see the 1-Wire line move.
The SDK provides the following function to configure and initialize the 1-Wire pin:
MXC_OWM_Init(&owm_cfg);
Upon further examination I noticed that it calls the
MXC_GPIO_Config(&gpio_cfg_owm)
function passing the gpio_cfg_owm structure.this structure configures the wrong settings for the MAX32650 device:
as per the user guide the alternate function should be set to 1 instead of 2.
Other configuration may not be applied as well during setup using
MXC_OWM_Init()
such as the use of external pull up.I fixed on my application by running 'MXC_OWM_Init()` first and sequentially reconfiguring the GPIO for the 1-Wire pin on the MAX32650FTHR.
A Working example: