1 /* 2 * This file is part of the MicroPython project, http://micropython.org/ 3 * The MIT License (MIT) 4 * Copyright (c) 2021 Damien P. George 5 */ 6 7 #include <stdint.h> 8 9 #define MICROPY_HW_BOARD_NAME "LEGO Technic Hub No.6" 10 #define MICROPY_HW_MCU_NAME "STM32F413" 11 12 #define MICROPY_HW_HAS_SWITCH (0) 13 #define MICROPY_HW_HAS_FLASH (1) 14 #define MICROPY_PY_PYB_LEGACY (0) 15 #define MICROPY_HW_ENTER_BOOTLOADER_VIA_RESET (0) 16 #define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0) 17 #define MICROPY_HW_ENABLE_RTC (1) 18 #define MICROPY_HW_ENABLE_RNG (1) 19 #define MICROPY_HW_ENABLE_DAC (1) 20 #define MICROPY_HW_ENABLE_USB (1) 21 22 // HSE is 16MHz, CPU freq set to 100MHz, buses at maximum freq 23 #define MICROPY_HW_CLK_PLLM (16) 24 #define MICROPY_HW_CLK_PLLN (200) 25 #define MICROPY_HW_CLK_PLLP (RCC_PLLP_DIV2) 26 #define MICROPY_HW_CLK_PLLQ (4) 27 #define MICROPY_HW_CLK_AHB_DIV (RCC_SYSCLK_DIV1) 28 #define MICROPY_HW_CLK_APB1_DIV (RCC_HCLK_DIV2) 29 #define MICROPY_HW_CLK_APB2_DIV (RCC_HCLK_DIV1) 30 31 // For 2.7 to 3.6 V, 75 to 100 MHz: 3 wait states. 32 #define MICROPY_HW_FLASH_LATENCY FLASH_LATENCY_3 33 34 // UART buses 35 // Bluetooth HCI 36 #define MICROPY_HW_UART2_CTS (pin_D3) 37 #define MICROPY_HW_UART2_RTS (pin_D4) 38 #define MICROPY_HW_UART2_TX (pin_D5) 39 #define MICROPY_HW_UART2_RX (pin_D6) 40 // Port B 41 #define MICROPY_HW_UART4_TX (pin_D1) 42 #define MICROPY_HW_UART4_RX (pin_D0) 43 // Port D 44 #define MICROPY_HW_UART5_TX (pin_C12) 45 #define MICROPY_HW_UART5_RX (pin_D2) 46 // Port A 47 #define MICROPY_HW_UART7_TX (pin_E8) 48 #define MICROPY_HW_UART7_RX (pin_E7) 49 // Port C 50 #define MICROPY_HW_UART8_TX (pin_E1) 51 #define MICROPY_HW_UART8_RX (pin_E0) 52 // Port F 53 #define MICROPY_HW_UART9_TX (pin_D15) 54 #define MICROPY_HW_UART9_RX (pin_D14) 55 // Port E 56 #define MICROPY_HW_UART10_TX (pin_E3) 57 #define MICROPY_HW_UART10_RX (pin_E2) 58 59 // SPI buses 60 #define MICROPY_HW_SPI1_NSS (pin_A4) // shared with DAC 61 #define MICROPY_HW_SPI1_SCK (pin_A5) // shared with DAC 62 #define MICROPY_HW_SPI1_MISO (pin_A6) 63 #define MICROPY_HW_SPI1_MOSI (pin_A7) 64 #define MICROPY_HW_SPI2_NSS (pin_B12) 65 #define MICROPY_HW_SPI2_SCK (pin_B13) 66 #define MICROPY_HW_SPI2_MISO (pin_C2) 67 #define MICROPY_HW_SPI2_MOSI (pin_C3) 68 69 // USB config 70 #define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9) 71 #define MICROPY_HW_USB_FS (1) 72 #define MICROPY_HW_USB_MSC (1) 73 74 // Bluetooth config 75 #define MICROPY_HW_BLE_UART_ID (PYB_UART_2) 76 #define MICROPY_HW_BLE_UART_BAUDRATE (115200) 77 #define MICROPY_HW_BLE_UART_BAUDRATE_SECONDARY (921600) 78 #define MICROPY_HW_BLE_BTSTACK_CHIPSET_INSTANCE btstack_chipset_cc256x_instance() 79 80 // SPI flash, for R/W storage 81 // The first 1MiB is skipped because it's used by the built-in bootloader 82 // Note: MICROPY_HW_SPIFLASH_OFFSET_BYTES must be a multiple of MP_SPIFLASH_ERASE_BLOCK_SIZE 83 #define MICROPY_HW_SPIFLASH_OFFSET_BYTES (1024 * 1024) 84 #define MICROPY_HW_SPIFLASH_BLOCKMAP(bl) ((bl) + MICROPY_HW_SPIFLASH_OFFSET_BYTES / FLASH_BLOCK_SIZE) 85 #define MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl) ((bl) + MICROPY_HW_SPIFLASH_OFFSET_BYTES / MP_SPIFLASH_ERASE_BLOCK_SIZE) 86 #define MICROPY_HW_SPIFLASH_ENABLE_CACHE (1) 87 #define MICROPY_HW_SPIFLASH_SIZE_BITS (256 * 1024 * 1024 - MICROPY_HW_SPIFLASH_OFFSET_BYTES * 8) 88 #define MICROPY_HW_SPIFLASH_CS (MICROPY_HW_SPI2_NSS) 89 #define MICROPY_HW_SPIFLASH_SCK (MICROPY_HW_SPI2_SCK) 90 #define MICROPY_HW_SPIFLASH_MISO (MICROPY_HW_SPI2_MISO) 91 #define MICROPY_HW_SPIFLASH_MOSI (MICROPY_HW_SPI2_MOSI) 92 93 // SPI flash, block device config 94 extern int32_t board_bdev_ioctl(void); 95 extern struct _spi_bdev_t spi_bdev; 96 #define MICROPY_HW_BDEV_IOCTL(op, arg) ( \ 97 (op) == BDEV_IOCTL_NUM_BLOCKS ? (MICROPY_HW_SPIFLASH_SIZE_BITS / 8 / FLASH_BLOCK_SIZE) : \ 98 (op) == BDEV_IOCTL_INIT ? board_bdev_ioctl() : \ 99 spi_bdev_ioctl(&spi_bdev, (op), (arg)) \ 100 ) 101 102 // Configuration for stardard block protocol (block size FLASH_BLOCK_SIZE). 103 #define MICROPY_HW_BDEV_READBLOCKS(dest, bl, n) \ 104 spi_bdev_readblocks(&spi_bdev, (dest), MICROPY_HW_SPIFLASH_BLOCKMAP(bl), (n)) 105 #define MICROPY_HW_BDEV_WRITEBLOCKS(src, bl, n) \ 106 spi_bdev_writeblocks(&spi_bdev, (src), MICROPY_HW_SPIFLASH_BLOCKMAP(bl), (n)) 107 108 // Configuration for extended block protocol (block size MP_SPIFLASH_ERASE_BLOCK_SIZE). 109 #define MICROPY_HW_BDEV_BLOCKSIZE_EXT (MP_SPIFLASH_ERASE_BLOCK_SIZE) 110 #define MICROPY_HW_BDEV_READBLOCKS_EXT(dest, bl, off, len) \ 111 (spi_bdev_readblocks_raw(&spi_bdev, (dest), MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (off), (len))) 112 #define MICROPY_HW_BDEV_WRITEBLOCKS_EXT(src, bl, off, len) \ 113 (spi_bdev_writeblocks_raw(&spi_bdev, (src), MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (off), (len))) 114 #define MICROPY_HW_BDEV_ERASEBLOCKS_EXT(bl, len) \ 115 (spi_bdev_eraseblocks_raw(&spi_bdev, MICROPY_HW_SPIFLASH_BLOCKMAP_EXT(bl), (len))) 116 117 // Board control config 118 #define MICROPY_BOARD_STARTUP board_init 119 120 /******************************************************************************/ 121 // Bootloader configuration 122 123 #define MBOOT_LEAVE_BOOTLOADER_VIA_RESET (0) 124 125 #define MBOOT_LED1 0 126 #define MBOOT_BOARD_LED_INIT board_mboot_led_init 127 #define MBOOT_BOARD_LED_STATE board_mboot_led_state 128 129 #define MBOOT_BOARD_EARLY_INIT board_init 130 #define MBOOT_BOARD_CLEANUP board_mboot_cleanup 131 #define MBOOT_BOARD_GET_RESET_MODE board_mboot_get_reset_mode 132 133 /******************************************************************************/ 134 // Function declarations 135 136 void board_init(void); 137 void board_mboot_cleanup(int reset_mode); 138 void board_mboot_led_init(void); 139 void board_mboot_led_state(int led, int state); 140 int board_mboot_get_reset_mode(void); 141 void *btstack_chipset_cc256x_instance(void); 142