Skip to content

Commit

Permalink
Add lpc4337xpresso interface project
Browse files Browse the repository at this point in the history
  • Loading branch information
mbrossard committed Feb 15, 2024
1 parent fec4f08 commit 3d8d726
Show file tree
Hide file tree
Showing 6 changed files with 181 additions and 0 deletions.
4 changes: 4 additions & 0 deletions projects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,10 @@ projects:
- *module_if
- *module_hic_lpc4322
- records/board/hani_iot.yaml
lpc4322_lpc4337xpresso_if:
- *module_if
- *module_hic_lpc4322
- records/board/lpc4337xpresso.yaml
lpc4322_lpc54114xpresso_if:
- *module_if
- *module_hic_lpc4322
Expand Down
6 changes: 6 additions & 0 deletions records/board/lpc4337xpresso.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
common:
sources:
board:
- source/board/lpc4337xpresso.c
family:
- source/family/nxp/lpc43xx/target_lpc4337.c
35 changes: 35 additions & 0 deletions source/board/lpc4337xpresso.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* @file lpc4337xpresso.c
* @brief board ID for the NXP LPC4337Xpresso board
*
* DAPLink Interface Firmware
* Copyright (c) 2022, Arm Limited, All Rights Reserved
* 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 = "4337",
.family_id = kStub_HWReset_FamilyID,
.daplink_url_name = "PRODINFOHTM",
.daplink_drive_name = "LPC4337",
.daplink_target_url = "https://os.mbed.com/platforms/LPCXpresso4337/",
.target_cfg = &target_device,
.board_vendor = "NXP",
.board_name = "LPC4337Xpresso",
};
89 changes: 89 additions & 0 deletions source/family/nxp/lpc43xx/flash_blob.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/* Flash algorithm for LPC18xx/43xx IAP 512kB Flash Bank A/B
*
* DAPLink Interface Firmware
* Copyright (c) 2009-2022 Arm Limited, All Rights Reserved
* 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.
*/

// Generated from 'LPC18xx43xx_512_BA.FLM' (LPC18xx/43xx IAP 512kB Flash Bank A)
// and 'LPC18xx43xx_512_BB.FLM' (LPC18xx/43xx IAP 512kB Flash Bank B)
// Originating from 'Keil.LPC4300_DFP.2.9.0.pack'
// digest = 61c40f68a6d637e3be566d503ac3f8dba13b6f39c7caae1a268f8945e468bd3f, file size = 12560
// algo version = 0x101, algo size = 452 (0x1c4)
static const uint32_t LPC18xx43xx_512_flash_prog_blob[] = {
0xe7fdbe00,
0x0e400300, 0xd3012807, 0x1dc008c0, 0xb5704770, 0x220d4956, 0x06524449, 0x42906048, 0x2001d001,
0x2000e000, 0x4a536088, 0x62d04851, 0x4c534852, 0x444c6008, 0x4e522031, 0x46216020, 0x68323118,
0x4620460d, 0x20004790, 0x203661a0, 0x68326020, 0x46204629, 0x69a04790, 0xd0002800, 0xbd702001,
0x47702000, 0x4c45b5f8, 0x444c2032, 0x270e2600, 0x4d3ec4c1, 0x444d4621, 0x602068a8, 0x310c4840,
0x483e6802, 0x44483c0c, 0x47909100, 0x280069a0, 0x2034d10f, 0x6828c4c1, 0x68a86020, 0x48386060,
0x68023c0c, 0x99004835, 0x47904448, 0x280069a0, 0x2001d000, 0xb5f8bdf8, 0xffa2f7ff, 0x46044d2f,
0x444d2032, 0x4e29c511, 0x444e602c, 0x606868b0, 0x46294f2b, 0x48293110, 0x4448683a, 0x91003d08,
0x69a84790, 0xd10f2800, 0xc5112034, 0x6830602c, 0x68b06068, 0x482160a8, 0x4448683a, 0x99003d08,
0x69a84790, 0xd0002800, 0xbdf82001, 0xb082b5f7, 0xf7ff4607, 0x4c19ff75, 0x444c2132, 0x60216060,
0x60a04d12, 0x68a8444d, 0x60e04e15, 0x31184621, 0x46206832, 0x47909100, 0x280069a0, 0x2033d113,
0x9804c481, 0x20016020, 0x60600280, 0x60a06828, 0x60e068a8, 0x68324809, 0x3c084448, 0x47909900,
0x280069a0, 0x2001d000, 0xbdf0b005, 0x00000004, 0x01000800, 0x40050040, 0x00002ee0, 0x00000010,
0x10400100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
};

// Start address of flash
static const uint32_t flash_start = 0x1a000000;
// Size of flash
static const uint32_t flash_size = 0x00080000;

/**
* 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[] = {
{0x1a000000, 0x00002000},
{0x1a010000, 0x00010000},
{0x1b000000, 0x00002000},
{0x1b010000, 0x00010000},
};

static const program_target_t flash = {
0x20000013, // Init
0x20000065, // UnInit
0x20000069, // EraseChip
0x200000bb, // EraseSector
0x20000111, // ProgramPage
0x00000000, // Verify

// BKPT : start of blob + 1
// RSB : blob start + header + rw data offset
// RSP : stack pointer
{
0x20000001,
0x20000188,
0x20000c00
},

// mem buffer location
0x20000c00,
// location to write prog_blob in target RAM
0x20000000,
// prog_blob size
sizeof(LPC18xx43xx_512_flash_prog_blob),
// address of prog_blob
LPC18xx43xx_512_flash_prog_blob,
// ram_to_flash_bytes_to_be_written
0x00000400
};
46 changes: 46 additions & 0 deletions source/family/nxp/lpc43xx/target_lpc4337.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @file target.c
* @brief Target information for the lpc4337
*
* DAPLink Interface Firmware
* Copyright (c) 2022, Arm Limited, All Rights Reserved
* 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 "daplink_debug.h"
// The file flash_blob.c must only be included in target.c
#include "flash_blob.c"

// target information
target_cfg_t target_device = {
.version = kTargetConfigVersion,
.sectors_info = sectors_info,
.sector_info_length = (sizeof(sectors_info))/(sizeof(sector_info_t)),
.flash_regions[0].start = 0x1a000000,
.flash_regions[0].end = 0x1a000000 + KB(512),
.flash_regions[0].flags = kRegionIsDefault,
.flash_regions[0].flash_algo = (program_target_t *) &flash,
.flash_regions[1].start = 0x1b000000,
.flash_regions[1].end = 0x1b000000 + KB(512),
.flash_regions[1].flags = 0,
.flash_regions[1].flash_algo = (program_target_t *) &flash,
.ram_regions[0].start = 0x10000000,
.ram_regions[0].end = 0x10008000,
.ram_regions[1].start = 0x20000000,
.ram_regions[1].end = 0x20010000,
.target_vendor = "NXP",
.target_part_number = "LPC4337JET100",
};
1 change: 1 addition & 0 deletions test/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ def VENDOR_TO_FAMILY(x, y) : return (VENDOR_ID[x] <<8) | y
( 0x1313, VENDOR_TO_FAMILY('Stub', 3), 'm48ssidae_numaker_iot_m467_if', 'm48ssidae_bl', None ),
( 0x2600, VENDOR_TO_FAMILY('Nordic', 2), 'k20dx_ep_agora_if', None, None ),
( 0x2601, VENDOR_TO_FAMILY('NXP', 0), 'k20dx_ep_kairos_if', None, None ),
( 0x4337, VENDOR_TO_FAMILY('Stub', 1), 'lpc4322_lpc4337xpresso_if', 'lpc4322_bl', 'LPCXpresso4337' ),
( 0x4600, VENDOR_TO_FAMILY('Realtek', 1), 'lpc11u35_rtl8195am_if', None, 'REALTEK-RTL8195AM' ),
( 0x5006, VENDOR_TO_FAMILY('Stub', 1), 'lpc11u35_musca_a_if', None, 'ARM_MUSCA_A1' ),
( 0x5007, VENDOR_TO_FAMILY('Stub', 1), 'lpc11u35_musca_b_if', None, 'ARM_MUSCA_B1' ),
Expand Down

0 comments on commit 3d8d726

Please sign in to comment.