From e6474dec891fbcaf84802f0b8d7183aa418373b0 Mon Sep 17 00:00:00 2001 From: EricB-ADI <122300463+EricB-ADI@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:08:09 -0500 Subject: [PATCH] feat(MiscDrivers): Add API for Setting SDHC Data Width (#1045) Signed-off-by: Sadik Ozer Co-authored-by: Sadik Ozer <46590392+ozersa@users.noreply.github.com> Co-authored-by: Jake Carter --- .github/workflows/BLE_Examples_Test.yml | 2 +- .../CMSIS/Device/Maxim/GCC/mxc_version.mk | 24 ++++++++++++++++++ Libraries/SDHC/Include/sdhc_lib.h | 5 +++- Libraries/SDHC/Source/sdhc_lib.c | 25 +++++++++++++++++++ Libraries/SDHC/ff13/Source/diskio.c | 4 +-- Libraries/SDHC/ff14/Source/diskio.c | 4 +-- Libraries/SDHC/ff15/source/diskio.c | 4 +-- 7 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk diff --git a/.github/workflows/BLE_Examples_Test.yml b/.github/workflows/BLE_Examples_Test.yml index f01bc199a7d..d37eb451ce6 100644 --- a/.github/workflows/BLE_Examples_Test.yml +++ b/.github/workflows/BLE_Examples_Test.yml @@ -43,7 +43,7 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: - push: + env: LOCK_MAX32655_B2: false diff --git a/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk b/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk new file mode 100644 index 00000000000..6a910da3fea --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk @@ -0,0 +1,24 @@ +############################################################################### + # + # Copyright (C) 2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## +# Autogenerated version info for build system. +MSDK_VERSION_STRING := v2023_10-172-gd3f8669fd6 +MSDK_VERSION_YEAR := 2023 +MSDK_VERSION_MONTH := 10 + +# Add root MAXIM_PATH to IPATH so compiler can locate msdk_version.h +IPATH += $(MAXIM_PATH) diff --git a/Libraries/SDHC/Include/sdhc_lib.h b/Libraries/SDHC/Include/sdhc_lib.h index 5cd6d666844..95759f4df06 100644 --- a/Libraries/SDHC/Include/sdhc_lib.h +++ b/Libraries/SDHC/Include/sdhc_lib.h @@ -123,7 +123,10 @@ int MXC_SDHC_Lib_WriteAsync(unsigned int dst_addr, void *src_addr, unsigned int /* ************************************************************************** */ int MXC_SDHC_Lib_ReadAsync(void *dst_addr, unsigned int src_addr, unsigned int cnt, mxc_sdhc_data_width width, mxc_sdhc_callback_fn callback); - +/* ************************************************************************** */ +void MXC_SDHC_Set_Default_DataWidth(mxc_sdhc_data_width width); +/* ************************************************************************** */ +mxc_sdhc_data_width MXC_SDHC_Get_Default_DataWidth(void); /**@} end of group sdhc */ diff --git a/Libraries/SDHC/Source/sdhc_lib.c b/Libraries/SDHC/Source/sdhc_lib.c index 0831788f666..cefa46a1fdc 100644 --- a/Libraries/SDHC/Source/sdhc_lib.c +++ b/Libraries/SDHC/Source/sdhc_lib.c @@ -92,6 +92,7 @@ int card_rca; mxc_sdhc_lib_card_type card_type = CARD_NONE; mxc_sdhc_csd_regs_t g_csd; bool g_csd_is_cached = false; +static mxc_sdhc_data_width default_data_width = MXC_SDHC_LIB_SINGLE_DATA; /* **** Functions **** */ @@ -236,6 +237,8 @@ int MXC_SDHC_Lib_SetBusWidth(mxc_sdhc_data_width bus_width) uint32_t card_status; int result; + + cmd_cfg.direction = MXC_SDHC_DIRECTION_CFG; cmd_cfg.callback = NULL; @@ -445,6 +448,9 @@ int MXC_SDHC_Lib_Prepare_Trans(mxc_sdhc_data_width width) mxc_sdhc_cmd_cfg_t cmd_cfg; int result; + + + cmd_cfg.direction = MXC_SDHC_DIRECTION_CFG; cmd_cfg.arg_1 = 0; cmd_cfg.host_control_1 = MXC_SDHC_Get_Host_Cn_1(); @@ -499,6 +505,8 @@ int MXC_SDHC_Lib_Write(unsigned int dst_addr, void *src_addr, unsigned int cnt, int result; mxc_sdhc_cmd_cfg_t cmd_cfg; + + result = MXC_SDHC_Lib_Prepare_Trans(width); if (result != E_NO_ERROR) { return result; @@ -527,6 +535,9 @@ int MXC_SDHC_Lib_Read(void *dst_addr, unsigned int src_addr, unsigned int cnt, m int result; mxc_sdhc_cmd_cfg_t cmd_cfg; + + + result = MXC_SDHC_Lib_Prepare_Trans(width); if (result != E_NO_ERROR) { return result; @@ -555,6 +566,7 @@ int MXC_SDHC_Lib_WriteAsync(unsigned int dst_addr, void *src_addr, unsigned int int data; mxc_sdhc_cmd_cfg_t cmd_cfg; + data = MXC_SDHC_Lib_Prepare_Trans(width); if (data == E_BUSY) { return E_BUSY; @@ -586,6 +598,8 @@ int MXC_SDHC_Lib_ReadAsync(void *dst_addr, unsigned int src_addr, unsigned int c int data; mxc_sdhc_cmd_cfg_t cmd_cfg; + + data = MXC_SDHC_Lib_Prepare_Trans(width); if (data == E_BUSY) { return E_BUSY; @@ -610,4 +624,15 @@ int MXC_SDHC_Lib_ReadAsync(void *dst_addr, unsigned int src_addr, unsigned int c return MXC_SDHC_SendCommandAsync(&cmd_cfg); } +void MXC_SDHC_Set_Default_DataWidth(mxc_sdhc_data_width width) +{ + MXC_ASSERT(width == MXC_SDHC_LIB_SINGLE_DATA || width == MXC_SDHC_LIB_QUAD_DATA); + default_data_width = width; +} + +mxc_sdhc_data_width MXC_SDHC_Get_Default_DataWidth(void) +{ + return default_data_width; +} + /**@} end of group sdhc */ diff --git a/Libraries/SDHC/ff13/Source/diskio.c b/Libraries/SDHC/ff13/Source/diskio.c index a8bcae921ce..0351eb052cf 100644 --- a/Libraries/SDHC/ff13/Source/diskio.c +++ b/Libraries/SDHC/ff13/Source/diskio.c @@ -156,7 +156,7 @@ DRESULT disk_read ( switch(pdrv){ case DEV_SD: - if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK; @@ -196,7 +196,7 @@ DRESULT disk_write ( switch(pdrv){ case DEV_SD: - if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK; diff --git a/Libraries/SDHC/ff14/Source/diskio.c b/Libraries/SDHC/ff14/Source/diskio.c index 62ccad4182c..0553b45af45 100644 --- a/Libraries/SDHC/ff14/Source/diskio.c +++ b/Libraries/SDHC/ff14/Source/diskio.c @@ -109,7 +109,7 @@ DRESULT disk_read ( { DRESULT status; - if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK; @@ -135,7 +135,7 @@ DRESULT disk_write ( { DRESULT status; - if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK; diff --git a/Libraries/SDHC/ff15/source/diskio.c b/Libraries/SDHC/ff15/source/diskio.c index a2ff0582c9f..8ae3a8e18ad 100644 --- a/Libraries/SDHC/ff15/source/diskio.c +++ b/Libraries/SDHC/ff15/source/diskio.c @@ -156,7 +156,7 @@ DRESULT disk_read ( switch(pdrv){ case DEV_SD: - if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Read(buff, sector, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK; @@ -196,7 +196,7 @@ DRESULT disk_write ( switch(pdrv){ case DEV_SD: - if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_LIB_SINGLE_DATA) != E_NO_ERROR) { + if (MXC_SDHC_Lib_Write(sector, (void *)buff, count, MXC_SDHC_Get_Default_DataWidth()) != E_NO_ERROR) { status = RES_ERROR; } else { status = RES_OK;