@@ -372,6 +372,29 @@ __STATIC_INLINE void wait_state_manual()
372
372
;
373
373
}
374
374
375
+ sl_psram_return_type_t qspi_check_access (uint32_t addr , uint32_t len )
376
+ {
377
+ uint32_t ram_start_addr ;
378
+
379
+ if (PSRAM_Device .spi_config .spi_config_2 .cs_no == 0 ) {
380
+ ram_start_addr = 0x0A000000 ;
381
+ } else if (PSRAM_Device .spi_config .spi_config_2 .cs_no == 1 ) {
382
+ ram_start_addr = 0x0B000000 ;
383
+ } else {
384
+ return PSRAM_INVALID_ADDRESS_LENGTH ;
385
+ }
386
+ if (addr < ram_start_addr ) {
387
+ return PSRAM_INVALID_ADDRESS_LENGTH ;
388
+ }
389
+ if (addr >= ram_start_addr + PSRAM_Device .devDensity / 8 ) {
390
+ return PSRAM_INVALID_ADDRESS_LENGTH ;
391
+ }
392
+ if (addr + len >= ram_start_addr + PSRAM_Device .devDensity / 8 ) {
393
+ return PSRAM_INVALID_ADDRESS_LENGTH ;
394
+ }
395
+ return PSRAM_SUCCESS ;
396
+ }
397
+
375
398
/* UDMA controller transfer descriptor chain complete callback */
376
399
static void udma_transfer_complete (uint32_t event , uint32_t ch )
377
400
{
@@ -1138,6 +1161,7 @@ sl_psram_return_type_t sl_si91x_psram_manual_write_in_blocking_mode(uint32_t add
1138
1161
uint8_t psramXferBuf [4 ];
1139
1162
uint32_t xferAddr ;
1140
1163
uint32_t lengthInBytes = 0 ;
1164
+ sl_psram_return_type_t ret ;
1141
1165
1142
1166
if (PSRAMStatus .state != initialised ) {
1143
1167
return PSRAM_NOT_INITIALIZED ;
@@ -1151,10 +1175,11 @@ sl_psram_return_type_t sl_si91x_psram_manual_write_in_blocking_mode(uint32_t add
1151
1175
return PSRAM_NULL_ADDRESS ;
1152
1176
}
1153
1177
1154
- if ((!( addr >= PSRAM_BASE_ADDRESS && addr < ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))))
1155
- || (( addr + ( num_of_elements * hSize )) > ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))) ) {
1156
- return PSRAM_INVALID_ADDRESS_LENGTH ;
1178
+ ret = qspi_check_access ( addr , num_of_elements * hSize );
1179
+ if ( ret ) {
1180
+ return ret ;
1157
1181
}
1182
+
1158
1183
#if PSRAM_ROW_BOUNDARY_CROSSING_SUPPORTED
1159
1184
uint32_t rbxOffset ;
1160
1185
rbxOffset = addr % PSRAM_Device .defaultBurstWrapSize ;
@@ -1292,6 +1317,7 @@ sl_psram_return_type_t sl_si91x_psram_manual_read_in_blocking_mode(uint32_t addr
1292
1317
uint8_t psramXferBuf [7 ];
1293
1318
uint32_t xferAddr ;
1294
1319
uint32_t lengthInBytes = 0 ;
1320
+ sl_psram_return_type_t ret ;
1295
1321
1296
1322
if (PSRAMStatus .state != initialised ) {
1297
1323
return PSRAM_NOT_INITIALIZED ;
@@ -1305,9 +1331,9 @@ sl_psram_return_type_t sl_si91x_psram_manual_read_in_blocking_mode(uint32_t addr
1305
1331
return PSRAM_NULL_ADDRESS ;
1306
1332
}
1307
1333
1308
- if ((!( addr >= PSRAM_BASE_ADDRESS && addr < ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))))
1309
- || (( addr + ( num_of_elements * hSize )) > ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))) ) {
1310
- return PSRAM_INVALID_ADDRESS_LENGTH ;
1334
+ ret = qspi_check_access ( addr , num_of_elements * hSize );
1335
+ if ( ret ) {
1336
+ return ret ;
1311
1337
}
1312
1338
1313
1339
#if PSRAM_ROW_BOUNDARY_CROSSING_SUPPORTED
@@ -1470,6 +1496,7 @@ sl_psram_return_type_t sl_si91x_psram_manual_write_in_dma_mode(uint32_t addr,
1470
1496
uint32_t lengthInBytes ;
1471
1497
uint8_t psramXferBuf [4 ];
1472
1498
uint32_t xferAddr ;
1499
+ sl_psram_return_type_t ret ;
1473
1500
1474
1501
if (PSRAMStatus .state != initialised ) {
1475
1502
return PSRAM_NOT_INITIALIZED ;
@@ -1483,9 +1510,9 @@ sl_psram_return_type_t sl_si91x_psram_manual_write_in_dma_mode(uint32_t addr,
1483
1510
return PSRAM_NULL_ADDRESS ;
1484
1511
}
1485
1512
1486
- if ((!( addr >= PSRAM_BASE_ADDRESS && addr < ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))))
1487
- || (( addr + ( length * hSize )) > ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))) ) {
1488
- return PSRAM_INVALID_ADDRESS_LENGTH ;
1513
+ ret = qspi_check_access ( addr , length * hSize );
1514
+ if ( ret ) {
1515
+ return ret ;
1489
1516
}
1490
1517
1491
1518
lengthInBytes = (length * hSize );
@@ -1720,6 +1747,7 @@ sl_psram_return_type_t sl_si91x_psram_manual_read_in_dma_mode(uint32_t addr,
1720
1747
uint32_t lengthInBytes ;
1721
1748
uint8_t psramXferBuf [7 ];
1722
1749
uint32_t xferAddr ;
1750
+ sl_psram_return_type_t ret ;
1723
1751
1724
1752
if (PSRAMStatus .state != initialised ) {
1725
1753
return PSRAM_NOT_INITIALIZED ;
@@ -1733,9 +1761,9 @@ sl_psram_return_type_t sl_si91x_psram_manual_read_in_dma_mode(uint32_t addr,
1733
1761
return PSRAM_NULL_ADDRESS ;
1734
1762
}
1735
1763
1736
- if ((!( addr >= PSRAM_BASE_ADDRESS && addr < ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))))
1737
- || (( addr + ( length * hSize )) > ( PSRAM_BASE_ADDRESS + ( PSRAM_Device . devDensity / 8 ))) ) {
1738
- return PSRAM_INVALID_ADDRESS_LENGTH ;
1764
+ ret = qspi_check_access ( addr , length * hSize );
1765
+ if ( ret ) {
1766
+ return ret ;
1739
1767
}
1740
1768
1741
1769
lengthInBytes = (length * hSize );
0 commit comments