From 6acbc2a234104617ff3eb8bcfa5b879ff8abb1c6 Mon Sep 17 00:00:00 2001 From: riley fenlon Date: Mon, 12 Feb 2024 10:00:48 -0500 Subject: [PATCH] added CYW20820 --- internalblue/core.py | 4 +- internalblue/fw/fw_0x2305.py | 76 ++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 internalblue/fw/fw_0x2305.py diff --git a/internalblue/core.py b/internalblue/core.py index 8b18d65..d82e8cf 100755 --- a/internalblue/core.py +++ b/internalblue/core.py @@ -729,9 +729,9 @@ class InternalBlue(with_metaclass(ABCMeta, object)): ) return False - # Broadcom uses 0x000f as vendor ID, Cypress 0x0131 + # Broadcom uses 0x000f as vendor ID, Cypress 0x0131, Infineon 0x0009 vendor = (version[9] << 8) + version[8] - if vendor != 0xF and vendor != 0x131: + if vendor != 0xF and vendor != 0x131 and vendor != 0x9: self.logger.critical("Not running on a Broadcom or Cypress chip!") return False else: diff --git a/internalblue/fw/fw_0x2305.py b/internalblue/fw/fw_0x2305.py new file mode 100644 index 0000000..8413744 --- /dev/null +++ b/internalblue/fw/fw_0x2305.py @@ -0,0 +1,76 @@ +# fw_0x420e.py +# +# Generic firmware file in case we do not know something... +# +# Copyright (c) 2020 The InternalBlue Team. (MIT License) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of +# this software and associated documentation files (the "Software"), to deal in +# the Software without restriction, including without limitation the rights to +# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +# the Software, and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# - The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# - The Software is provided "as is", without warranty of any kind, express or +# implied, including but not limited to the warranties of merchantability, +# fitness for a particular purpose and noninfringement. In no event shall the +# authors or copyright holders be liable for any claim, damages or other +# liability, whether in an action of contract, tort or otherwise, arising from, +# out of or in connection with the Software or the use or other dealings in the +# Software. + +from __future__ import absolute_import +from .fw import MemorySection, FirmwareDefinition +from .. import Address + + +class CYW20820A1(FirmwareDefinition): + """ + CYW20820 is a Cypress evaluation board, the newest one that is currently available. + + Known issues: + + * `Launch_RAM` does not terminate and crashes the board. + + To get this working anyway: + The `Launch_RAM` handler HCI callback is at `0xF2884` and it can be overwritten with the + address of the memory snippet you want to launch. For example, at `0x219000` there is some + free memory. Put the function there. Then: + + `internalblue.patchRom(0xF2884, p32(ASM_LOCATION_RNG+1)): # function table entries are sub+1 + + """ + + # Firmware Infos + # Evaluation Kit CYW920820 + FW_NAME = "CYW20820A1" + + + # Memory Sections + # start, end, is_rom? is_ram? + SECTIONS = [ + MemorySection(0x00000000, 0x001FFFFF, True, False), # Internal ROM + MemorySection(0x00200000, 0x0024FFFF, False, True), # Internal Memory Cortex M3 + MemorySection( + 0x00270000, 0x0027FFFF, False, True + ), # Internal Memory Patchram Contents + MemorySection(0x00310000, 0x00321FFF, False, True), # HW Regs Cortex M3 (readable) + ] + + # Patchram + PATCHRAM_TARGET_TABLE_ADDRESS = 0x310000 + PATCHRAM_ENABLED_BITMAP_ADDRESS = 0x310404 + PATCHRAM_VALUE_TABLE_ADDRESS = 0x270000 + PATCHRAM_NUMBER_OF_SLOTS = 256 + PATCHRAM_ALIGNED = False + # only seems to work 4-byte aligned here ... + + # Launch_RAM is faulty so we need to overwrite it. This is the position of the handler. + LAUNCH_RAM = 0xF2884 + HCI_EVENT_COMPLETE = 0x1179E + + # Enable enhanced advertisement reports (bEnhancedAdvReport) + ENHANCED_ADV_REPORT_ADDRESS = Address(0x20294C) + +