Skip to content

Commit fe90a9b

Browse files
authored
Merge pull request #2470 from particle-iot/feature/flash-supports-page-write
[p2] Flash supports page write and other fixes
2 parents 6fb1d02 + 40d7394 commit fe90a9b

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

hal/src/rtl872x/exflash_hal.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,17 @@ static bool is_block_erased(uintptr_t addr, size_t size);
113113

114114
__attribute__((section(".ram.text"), noinline))
115115
static int perform_write(uintptr_t addr, const uint8_t* data, size_t size) {
116+
// There seems to be an alignment check inside FLASH_TxData256B()
117+
static __attribute__((aligned(32))) uint8_t aligned_buffer[256];
118+
116119
// XXX: No way of knowing whether the write operation succeeded or not
117120
for (size_t b = 0; b < size;) {
118-
size_t rem = MIN(8, (size - b));
119-
// XXX: do not use 12 byte writes, sometimes we get deadlocked
120-
// TxData256 doesn't seem to work
121-
FLASH_TxData12B(addr + b, (uint8_t)rem, (uint8_t*)data + b);
121+
size_t rem = MIN(256, (size - b));
122+
memcpy(aligned_buffer, (uint8_t*)data + b, rem);
123+
FLASH_TxData256B(addr + b, rem, aligned_buffer);
122124
b += rem;
123125
}
126+
124127
return SYSTEM_ERROR_NONE;
125128
}
126129

user/tests/wiring/no_fixture_spi/spix.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,13 @@ test(SPIX_03_SPI_Begin_With_Mode)
136136

137137
// HAL_SPI_INTERFACE1 does not support slave mode on NRF52840
138138
#if HAL_PLATFORM_RTL872X
139-
SPI.begin(SPI_MODE_SLAVE);
140-
querySpiInfo(HAL_SPI_INTERFACE1, &info);
139+
// HAL_SPI_INTERFACE1 does not support slave mode on P2
140+
SPI1.begin(SPI_MODE_SLAVE);
141+
querySpiInfo(HAL_SPI_INTERFACE2, &info);
141142
assertTrue(info.enabled);
142143
assertEqual(info.mode, SPI_MODE_SLAVE);
143144
#if PLATFORM_ID == PLATFORM_P2
144-
assertEqual(info.ss_pin, S3);
145+
assertEqual(info.ss_pin, D5);
145146
#else
146147
#error "Unknown platform!"
147148
#endif

user/tests/wiring/spi_master_slave/spi_master/spi_master.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,17 @@
142142
*********************************************************************************************
143143
*
144144
* P2 Wiring diagrams
145-
*
145+
*
146146
* SPI1/SPI1 SPI/SPI1 (SPI can't be used as slave)
147147
* Master: SPI1 (USE_SPI=SPI1) Master: SPI (USE_SPI=SPI)
148148
* Slave: SPI1 (USE_SPI=SPI1) Slave: SPI1 (USE_SPI=SPI1)
149-
*
149+
*
150150
* Master Slave Master Slave
151151
* CS D5 <-------> D5 CS CS S3 <---------> D5 CS
152-
* MISO D4 <-------> D3 MISO MISO S1 <---------> D3 MISO
153-
* MOSI D3 <-------> D2 MOSI MOSI S0 <---------> D2 MOSI
154-
* SCK D2 <-------> D4 SCK SCK S2 <---------> D4 SCK
155-
*
152+
* MISO D3 <-------> D3 MISO MISO S1 <---------> D3 MISO
153+
* MOSI D2 <-------> D2 MOSI MOSI S0 <---------> D2 MOSI
154+
* SCK D4 <-------> D4 SCK SCK S2 <---------> D4 SCK
155+
*
156156
*********************************************************************************************
157157
*/
158158

@@ -163,7 +163,7 @@ static uint8_t SPI_Master_Rx_Buffer[TRANSFER_LENGTH_2];
163163
static uint8_t SPI_Master_Rx_Buffer_Supper[1024];
164164
static volatile uint8_t DMA_Completed_Flag = 0;
165165

166-
static const char* txString =
166+
static const char* txString =
167167
"urjlU1tW177HwJsR6TylreMKge225qyLaIizW5IhXHkWgTGpH2fZtm2Od20Ne3Q81fxfUl7zoFaF\
168168
Z6smPzkpTGNSxGg7TCEiE2f19951tKxjFCB4Se86R4CaWW2YZF0mogirgsu2qRMGe4mC9QlJkCgXP\
169169
bgSVV1mc2xsZcu4bj0pbmPIhxkuyAHe4cVK3gLpWEGTadtAn2k66rOFNBdfPaE0cUY3wwXlVQ9yDl\
@@ -565,7 +565,7 @@ test(25_SPI_Master_Slave_Master_Reception)
565565
MY_SPI.transfer(nullptr, SPI_Master_Rx_Buffer_Supper, strlen(txString), SPI_DMA_Completed_Callback);
566566
while(DMA_Completed_Flag == 0);
567567
digitalWrite(MY_CS, HIGH);
568-
568+
569569
// Serial.printf("Length: %d\r\n", strlen((const char *)SPI_Master_Rx_Buffer_Supper));
570570
// for (size_t len = 0; len < strlen((const char *)SPI_Master_Rx_Buffer_Supper); len++) {
571571
// Serial.printf("%c", SPI_Master_Rx_Buffer_Supper[len]);

0 commit comments

Comments
 (0)