diff options
| -rwxr-xr-x | ports/nrf/Makefile | 5 | ||||
| -rw-r--r-- | ports/nrf/boards/feather52832/mpconfigboard.mk | 1 | ||||
| -rw-r--r-- | ports/nrf/boards/feather52840/mpconfigboard.mk | 1 | ||||
| -rw-r--r-- | ports/nrf/boards/pca10056/mpconfigboard.mk | 1 | ||||
| -rw-r--r-- | ports/nrf/internal_flash.c | 2 | ||||
| -rw-r--r-- | ports/nrf/usb/usb_msc_flash.c | 154 |
6 files changed, 76 insertions, 88 deletions
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 08e26e47f..5bbeb17e3 100755 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -10,13 +10,14 @@ else endif endif +include boards/$(BOARD)/mpconfigboard.mk + SD_LOWER = $(shell echo $(SD) | tr '[:upper:]' '[:lower:]') # Build directory with SD -BUILD = $(if $(SD),build-$(BOARD)-$(SD_LOWER),build-$(BOARD)) +BUILD ?= $(if $(SD),build-$(BOARD)-$(SD_LOWER),build-$(BOARD)) include ../../py/mkenv.mk -include boards/$(BOARD)/mpconfigboard.mk -include mpconfigport.mk ifneq ($(SD), ) diff --git a/ports/nrf/boards/feather52832/mpconfigboard.mk b/ports/nrf/boards/feather52832/mpconfigboard.mk index cd991a766..e49026d23 100644 --- a/ports/nrf/boards/feather52832/mpconfigboard.mk +++ b/ports/nrf/boards/feather52832/mpconfigboard.mk @@ -9,4 +9,3 @@ BOOT_FILE = boards/feather52832/bootloader/feather52_bootloader_$(SOFTDEV_VERSIO BOOT_SETTING_ADDR = 0x7F000 NRF_DEFINES += -DNRF52832_XXAA -NRF_DEFINES += -DADAFRUIT_FEATHER52 diff --git a/ports/nrf/boards/feather52840/mpconfigboard.mk b/ports/nrf/boards/feather52840/mpconfigboard.mk index 869724d4d..a59e64dc6 100644 --- a/ports/nrf/boards/feather52840/mpconfigboard.mk +++ b/ports/nrf/boards/feather52840/mpconfigboard.mk @@ -14,4 +14,3 @@ else endif NRF_DEFINES += -DNRF52840_XXAA -NRF_DEFINES += -DADAFRUIT_FEATHER52840 diff --git a/ports/nrf/boards/pca10056/mpconfigboard.mk b/ports/nrf/boards/pca10056/mpconfigboard.mk index 9db7a815e..5478069bb 100644 --- a/ports/nrf/boards/pca10056/mpconfigboard.mk +++ b/ports/nrf/boards/pca10056/mpconfigboard.mk @@ -15,4 +15,3 @@ endif NRF_DEFINES += -DNRF52840_XXAA -NRF_DEFINES += -DADAFRUIT_FEATHER52840 diff --git a/ports/nrf/internal_flash.c b/ports/nrf/internal_flash.c index 75c114a5c..812ef4d3f 100644 --- a/ports/nrf/internal_flash.c +++ b/ports/nrf/internal_flash.c @@ -57,7 +57,7 @@ uint32_t _flash_page_addr = NO_CACHE; /* Internal Flash API *------------------------------------------------------------------*/ static inline uint32_t lba2addr(uint32_t block) { - return ((uint32_t)__fatfs_flash_start_addr) + block * FILESYSTEM_BLOCK_SIZE; + return ((uint32_t)__fatfs_flash_start_addr) + block * FILESYSTEM_BLOCK_SIZE; } void internal_flash_init(void) { diff --git a/ports/nrf/usb/usb_msc_flash.c b/ports/nrf/usb/usb_msc_flash.c index 9c7445050..f77a9e5c5 100644 --- a/ports/nrf/usb/usb_msc_flash.c +++ b/ports/nrf/usb/usb_msc_flash.c @@ -34,8 +34,6 @@ */ /**************************************************************************/ -#ifdef NRF52840_XXAA - #include "tusb.h" #include "internal_flash.h" @@ -55,9 +53,6 @@ #define FL_PAGE_SZ 4096 -/*------------------------------------------------------------------*/ -/* VARIABLES - *------------------------------------------------------------------*/ static scsi_sense_fixed_data_t mscd_sense_data = { .response_code = 0x70, @@ -73,94 +68,91 @@ static scsi_mode_parameters_t const msc_dev_mode_para = .block_descriptor_length = 0 }; -/*------------------------------------------------------------------*/ -/* - *------------------------------------------------------------------*/ - //--------------------------------------------------------------------+ // tinyusb callbacks //--------------------------------------------------------------------+ -int32_t tud_msc_scsi_cb (uint8_t rhport, uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) -{ - // read10 & write10 has their own callback and MUST not be handled here - - void const* ptr = NULL; - uint16_t len = 0; - - // most scsi handled is input - bool in_xfer = true; - - switch (scsi_cmd[0]) - { - case SCSI_CMD_REQUEST_SENSE: - ptr = &mscd_sense_data; - len = sizeof(scsi_sense_fixed_data_t); - break; - - case SCSI_CMD_MODE_SENSE_6: - ptr = &msc_dev_mode_para; - len = sizeof(msc_dev_mode_para); - break; - - case SCSI_CMD_TEST_UNIT_READY: - ptr = NULL; - len = 0; - break; - - case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: - ptr = NULL; - len = 0; - break; - - default: - // negative is error -> Data stage is STALL, status = failed - return -1; - } - - // return len must not larger than bufsize - TU_ASSERT( bufsize >= len ); - - if ( ptr && len ) - { - if(in_xfer) - { - memcpy(buffer, ptr, len); - }else +int32_t tud_msc_scsi_cb (uint8_t rhport, uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) { + // read10 & write10 has their own callback and MUST not be handled here + + void const* ptr = NULL; + uint16_t len = 0; + + // most scsi handled is input + bool in_xfer = true; + + switch ( scsi_cmd[0] ) { - // SCSI output + case SCSI_CMD_REQUEST_SENSE: + ptr = &mscd_sense_data; + len = sizeof(scsi_sense_fixed_data_t); + break; + + case SCSI_CMD_MODE_SENSE_6: + ptr = &msc_dev_mode_para; + len = sizeof(msc_dev_mode_para); + break; + + case SCSI_CMD_TEST_UNIT_READY: + ptr = NULL; + len = 0; + break; + + case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: + ptr = NULL; + len = 0; + break; + + default: + // negative is error -> Data stage is STALL, status = failed + return -1; } - } - //------------- clear sense data if it is not request sense command -------------// - if ( SCSI_CMD_REQUEST_SENSE != scsi_cmd[0] ) - { - mscd_sense_data.sense_key = SCSI_SENSEKEY_NONE; - mscd_sense_data.additional_sense_code = 0; - mscd_sense_data.additional_sense_qualifier = 0; - } + // return len must not larger than bufsize + TU_ASSERT(bufsize >= len); + + if ( ptr && len ) + { + if ( in_xfer ) + { + memcpy(buffer, ptr, len); + } else + { + // SCSI output + } + } + + //------------- clear sense data if it is not request sense command -------------// + if ( SCSI_CMD_REQUEST_SENSE != scsi_cmd[0] ) + { + mscd_sense_data.sense_key = SCSI_SENSEKEY_NONE; + mscd_sense_data.additional_sense_code = 0; + mscd_sense_data.additional_sense_qualifier = 0; + } - return len; + return len; } /*------------------------------------------------------------------*/ /* Tinyusb Flash READ10 & WRITE10 *------------------------------------------------------------------*/ -int32_t tud_msc_read10_cb (uint8_t rhport, uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ - (void) rhport; (void) lun; (void) offset; +int32_t tud_msc_read10_cb (uint8_t rhport, uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { + (void) rhport; + (void) lun; + (void) offset; - uint32_t const block_count = bufsize/MSC_FLASH_BLOCK_SIZE; + uint32_t const block_count = bufsize / MSC_FLASH_BLOCK_SIZE; internal_flash_read_blocks(buffer, lba, block_count); - return block_count*MSC_FLASH_BLOCK_SIZE; + return block_count * MSC_FLASH_BLOCK_SIZE; } -int32_t tud_msc_write10_cb (uint8_t rhport, uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) -{ - (void) rhport; (void) lun; (void) offset; +int32_t tud_msc_write10_cb (uint8_t rhport, uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) { + (void) rhport; + (void) lun; + (void) offset; - uint32_t const block_count = bufsize/MSC_FLASH_BLOCK_SIZE; + uint32_t const block_count = bufsize / MSC_FLASH_BLOCK_SIZE; // bufsize <= CFG_TUD_MSC_BUFSIZE (4096) internal_flash_write_blocks(buffer, lba, block_count); @@ -168,19 +160,17 @@ int32_t tud_msc_write10_cb (uint8_t rhport, uint8_t lun, uint32_t lba, uint32_t // update fatfs's cache if address matches fs_user_mount_t* vfs = MP_STATE_VM(vfs_mount_table)->obj; - if ( (lba <= vfs->fatfs.winsect) && (vfs->fatfs.winsect <= (lba + bufsize/MSC_FLASH_BLOCK_SIZE)) ) { - memcpy(vfs->fatfs.win, buffer + MSC_FLASH_BLOCK_SIZE*(vfs->fatfs.winsect-lba), MSC_FLASH_BLOCK_SIZE); + if ( (lba <= vfs->fatfs.winsect) && (vfs->fatfs.winsect <= (lba + bufsize / MSC_FLASH_BLOCK_SIZE)) ) { + memcpy(vfs->fatfs.win, buffer + MSC_FLASH_BLOCK_SIZE * (vfs->fatfs.winsect - lba), MSC_FLASH_BLOCK_SIZE); } - return block_count*MSC_FLASH_BLOCK_SIZE; + return block_count * MSC_FLASH_BLOCK_SIZE; } -void tud_msc_write10_complete_cb(uint8_t rhport, uint8_t lun) -{ - (void) rhport; (void) lun; +void tud_msc_write10_complete_cb (uint8_t rhport, uint8_t lun) { + (void) rhport; + (void) lun; // flush pending cache when write10 is complete internal_flash_flush(); } - -#endif |
