diff --git a/projects.yaml b/projects.yaml index 555383da1..44f263048 100644 --- a/projects.yaml +++ b/projects.yaml @@ -550,6 +550,10 @@ projects: - *module_if - *module_hic_max32625 - records/board/max32650fthr.yaml + max32625_max32690evkit_if: + - *module_if + - *module_hic_max32625 + - records/board/max32690evkit.yaml nrf52820_microbit_bl: - *module_bl - records/hic_hal/nrf52820.yaml diff --git a/records/board/max32690evkit.yaml b/records/board/max32690evkit.yaml new file mode 100644 index 000000000..32d2f7d73 --- /dev/null +++ b/records/board/max32690evkit.yaml @@ -0,0 +1,7 @@ +common: + sources: + board: + - source/board/max32690evkit.c + family: + - source/family/maxim/max32690/target.c + - source/family/maxim/target_reset_max32xxx.c diff --git a/source/board/max32690evkit.c b/source/board/max32690evkit.c new file mode 100644 index 000000000..d38a3d373 --- /dev/null +++ b/source/board/max32690evkit.c @@ -0,0 +1,35 @@ +/** + * @file max32690evkit.c + * @brief board ID for the Analog Devices Inc.'s MAX32690EVKIT + * + * DAPLink Interface Firmware + * Copyright (c) 2023, Analog Devices, Inc. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +#include "target_family.h" +#include "target_board.h" + +const board_info_t g_board_info = { + .info_version = kBoardInfoVersion, + .board_id = "0426", + .family_id = kMaxim_MAX3266X_FamilyID, + .flags = kEnablePageErase, + .target_cfg = &target_device, + .daplink_url_name = "MAX32690HTM", + .daplink_target_url = "https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/MAX32690EVKIT.html", + .board_vendor = "Analog Devices Inc.", + .board_name = "MAX32690EVKIT", +}; diff --git a/source/family/maxim/max32690/flash_blob.c b/source/family/maxim/max32690/flash_blob.c new file mode 100644 index 000000000..03a6218fc --- /dev/null +++ b/source/family/maxim/max32690/flash_blob.c @@ -0,0 +1,99 @@ +/** + * @file flash_blob.c + * @brief Flash algorithm for the MAX32690 + * + * DAPLink Interface Firmware + * Copyright (c) 2023 Analog Devices, Inc. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +#include "flash_blob.h" + +#define CLOCK_DIV 0x00000078 +#define BURST_SIZE 0x00000080 + +#define FLC0_BASE 0x40029000 +#define FLASH0_BASE 0x10000000 // +#define FLASH0_SIZE 0x00300000 // 3MB +#define FLASH0_SECTOR KB(16) + +#define FLC1_BASE 0x40029400 // second flash controller +#define FLASH1_BASE 0x10300000 // second block of flash +#define FLASH1_SIZE 0x00040000 // 256KB +#define FLASH1_SECTOR KB(8) + + +static const uint32_t maxim_flash_prog_blob[] = { + 0xE00ABE00, + 0x444949a6, 0x68826808, 0x0f07f012, 0x68cad10b, 0x69486042, 0x6948b148, 0xf0126882, 0xbf040f07, + 0x604168c9, 0x2001d001, 0x20004770, 0x499b4770, 0x68084449, 0xf0226882, 0x60824270, 0xb1206948, + 0x68816948, 0x4170f021, 0x20006081, 0xb5104770, 0x444c4c92, 0xf0006820, 0xb928f8f4, 0xb1286960, + 0xf0006960, 0xb108f8ee, 0xbd102001, 0xbd102000, 0x4449498a, 0xb132698a, 0x4282698a, 0x688ad803, + 0x1a806949, 0x6809e000, 0xf012688a, 0xd1270f07, 0xb13a6a4a, 0x624a2200, 0xb11a6a4a, 0x624a2202, + 0xb9ea6a4a, 0xf022688a, 0xf0424270, 0x608a5200, 0xf422688a, 0xf442427f, 0x608a42aa, 0x68886008, + 0x0004f040, 0x68886088, 0x0f04f010, 0x6888d1fb, 0x4070f020, 0x6a486088, 0x0002f010, 0x4770bf08, + 0x47702001, 0x4c6db430, 0x69a3444c, 0x69a3b133, 0xd8034283, 0x1ac068a3, 0xe0006963, 0xf0126823, + 0xbf040f03, 0xc008f8d3, 0x0f07f01c, 0xf8d3d17d, 0xf1bcc024, 0xd0110f00, 0x0c00f04f, 0xc024f8c3, + 0xc024f8d3, 0x0f00f1bc, 0xf04fd008, 0xf8c30c02, 0xf8d3c024, 0xf1bcc024, 0xd17f0f00, 0xc008f8d3, + 0x4c70f02c, 0x5c00f04c, 0xc008f8c3, 0x6018e011, 0xcb04f852, 0xc030f8c3, 0xc008f8d3, 0x0c01f04c, + 0xc008f8c3, 0xc008f8d3, 0x0f01f01c, 0x1d00d1fa, 0x29041f09, 0xf010d302, 0xd1e80f1f, 0xc010f8d4, + 0x0f80f1bc, 0x2910d121, 0x6018d31f, 0xcb04f852, 0xc030f8c3, 0xcb04f852, 0xc034f8c3, 0xcb04f852, + 0xc038f8c3, 0xcb04f852, 0xc03cf8c3, 0xc008f8d3, 0x0c01f04c, 0xc008f8c3, 0xc008f8d3, 0x0f01f01c, + 0x3010d1fa, 0x29103910, 0x2904d2df, 0x6018d313, 0xcb04f852, 0xc030f8c3, 0xc008f8d3, 0x0c01f04c, + 0xc008f8c3, 0xc008f8d3, 0x0f01f01c, 0x1d00d1fa, 0x29041f09, 0xb1b9d2eb, 0xf04f6812, 0xf04f34ff, + 0xea620cff, 0x402c050c, 0xe017e000, 0x2c0cea4f, 0xd1f61e49, 0x631c6018, 0xf0406898, 0x60980001, + 0xf0106898, 0xd1fb0f01, 0xf0206898, 0x60984070, 0xf0106a58, 0xbf040002, 0x4770bc30, 0xbc302001, + 0x68814770, 0x0f07f011, 0x6a41d126, 0x2100b139, 0x6a416241, 0x2102b119, 0x6a416241, 0x6881b9e1, + 0x4170f021, 0x5100f041, 0x68816081, 0x417ff421, 0x412af441, 0x68816081, 0x0102f041, 0x68816081, + 0x0f02f011, 0x6881d1fb, 0x4170f021, 0x6a406081, 0x0002f010, 0x4770bf08, 0x47702001, 0x00000004, + 0x00000000, + FLC0_BASE, FLASH0_BASE,FLASH0_SIZE,CLOCK_DIV, BURST_SIZE, FLC1_BASE, FLASH1_BASE,FLASH1_SIZE +}; + +/** +* List of start and size for each size of flash sector - even indexes are start, odd are size +* The size will apply to all sectors between the listed address and the next address +* in the list. +* The last pair in the list will have sectors starting at that address and ending +* at address flash_start + flash_size. +*/ +static const sector_info_t sectors_info[] = { + {FLASH0_BASE, FLASH0_SECTOR}, + {FLASH1_BASE, FLASH1_SECTOR}, +}; + +static const program_target_t flash = { + 0x20000005, // Init + 0x20000033, // UnInit + 0x20000053, // EraseChip + 0x20000075, // EraseSector + 0x200000e9, // ProgramPage + 0x0, // Verify + + // BKPT : start of blob + 1 + // RSB : blob start + header + rw data offset + // RSP : stack pointer + { + 0x20000001, + 0x200002a4, + 0x20000500 + }, + + 0x20000000 + 0x00000A00, // mem buffer location + 0x20000000, // location to write prog_blob in target RAM + sizeof(maxim_flash_prog_blob), // prog_blob size + maxim_flash_prog_blob, // address of prog_blob + 0x00004000 // ram_to_flash_bytes_to_be_written +}; diff --git a/source/family/maxim/max32690/target.c b/source/family/maxim/max32690/target.c new file mode 100644 index 000000000..89e94d86d --- /dev/null +++ b/source/family/maxim/max32690/target.c @@ -0,0 +1,38 @@ +/** + * @file target.c + * @brief Target information for the MAX32690 + * + * DAPLink Interface Firmware + * Copyright (c) 2023 Analog Devices, Inc. + * SPDX-License-Identifier: Apache-2.0 + * + * 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. + */ + +#include "target_config.h" + +#include "flash_blob.c" + +/* MAX32690 3MiB+256KB Flash, 1MiB RAM */ +target_cfg_t target_device = { + .sectors_info = sectors_info, + .sector_info_length = (sizeof(sectors_info))/(sizeof(sector_info_t)), + .flash_regions[0].start = 0x10000000, + .flash_regions[0].end = 0x10000000 + MB(3) + KB(256), + .flash_regions[0].flags = kRegionIsDefault, + .flash_regions[0].flash_algo = (program_target_t *) &flash, + .ram_regions[0].start = 0x20000000, + .ram_regions[0].end = 0x20000000 + MB(1), + .target_vendor = "ADI", + .target_part_number = "MAX32690", +}; diff --git a/test/info.py b/test/info.py index 8c7c96eac..f73d8f7c4 100644 --- a/test/info.py +++ b/test/info.py @@ -101,6 +101,7 @@ ('max32625_max78000fthr_if', False, 0x0000, "bin" ), ('max32625_max32670evkit_if', False, 0x0000, "bin" ), ('max32625_max32650fthr_if', False, 0x0000, "bin" ), + ('max32625_max32690evkit_if', False, 0x0000, "bin" ), ('kl26z_if', False, 0x0000, "bin" ), ('k20dx_if', False, 0x0000, "bin" ), ('k26f_if', False, 0x0000, "bin" ), @@ -182,6 +183,7 @@ def VENDOR_TO_FAMILY(x, y) : return (VENDOR_ID[x] <<8) | y ( 0x0423, VENDOR_TO_FAMILY('Stub', 1), 'max32625_max78000fthr_if', 'max32625_bl', 'MAX78000' ), ( 0x0424, VENDOR_TO_FAMILY('Stub', 1), 'max32625_max32670evkit_if', 'max32625_bl', 'MAX32670' ), ( 0x0425, VENDOR_TO_FAMILY('Stub', 1), 'max32625_max32650fthr_if', 'max32625_bl', 'MAX32650' ), + ( 0x0426, VENDOR_TO_FAMILY('Stub', 1), 'max32625_max32690evkit_if', 'max32625_bl', 'MAX32690' ), ( 0x0700, VENDOR_TO_FAMILY('Stub', 1), 'stm32f103xb_stm32f103rb_if', 'stm32f103xb_bl', 'ST-Nucleo-F103RB' ), ( 0x0720, VENDOR_TO_FAMILY('Stub', 1), 'stm32f103xb_stm32f401re_if', 'stm32f103xb_bl', 'ST-Nucleo-F401RE' ), ( 0x0720, VENDOR_TO_FAMILY('Stub', 1), 'stm32f103xb_stm32f072rb_if', 'stm32f103xb_bl', 'ST-Nucleo-F072RB' ), @@ -315,6 +317,7 @@ def VENDOR_TO_FAMILY(x, y) : return (VENDOR_ID[x] <<8) | y 0x0423, # MAX78000FTHR 0x0424, # MAX32670EVKIT 0x0425, # MAX32650FTHR + 0x0426, # MAX32690FTHR 0x0460, # WISE-1570 0x1101, # Nordic-nRF52-DK 0x1102, # Nordic-nRF52840-DK