Add flash_size to web interface

This commit is contained in:
feelfree69
2026-02-28 19:56:18 +01:00
parent 23e2f5a99e
commit 7a0f248424
4 changed files with 39 additions and 9 deletions
+9
View File
@@ -17,6 +17,8 @@
// #define DEBUG
#include "debug.h"
extern __xdata char flash_size_str[10];
#define L2_MAX_TRANSFER 30
#pragma codeseg BANK1
@@ -96,6 +98,10 @@ void itoa_html(uint8_t v)
char_to_html('0' + (v % 10));
}
void string_to_html(register char *s)
{
while (*s) char_to_html(*s++);
}
uint16_t stat_content(void)
{
@@ -234,6 +240,9 @@ void send_basic_info(void)
slen += strtox(outbuf + slen, BUILD_DATE);
slen += strtox(outbuf + slen, "\",\"hw_ver\":\"");
slen += strtox(outbuf + slen, machine.machine_name);
slen += strtox(outbuf + slen, "\",\"flash_size\":\"");
string_to_html(flash_size_str);
slen += strtox(outbuf + slen, "\",\"sfp_slot_0\":\"");
send_sfp_info(0);
char_to_html('"');
+1
View File
@@ -131,6 +131,7 @@ void memset(register __xdata uint8_t *dst, register __xdata uint8_t v, register
uint16_t strlen(register __code const char *s);
uint16_t strlen_x(register __xdata const char *s);
uint16_t strtox(register __xdata uint8_t *dst, register __code const char *s);
uint16_t strcpy(register __xdata uint8_t *dst, register const char *s);
void tcpip_output(void);
uint8_t read_flash(uint8_t bank, __code uint8_t *addr);
void get_random_32(void);
+12 -2
View File
@@ -10,6 +10,7 @@
__xdata uint8_t dio_enabled;
__xdata struct flash_region_t flash_region;
__xdata uint32_t flash_size;
__xdata char flash_size_str[16];
// For the flash commands, see e.g. Windbond W25Q32JV datasheet
#define CMD_WRITE_STATUS 0x01
@@ -159,8 +160,17 @@ void flash_read_jedecid(void)
flash_size = 1UL << cap;
print_byte(cap);
print_string(" = ");
print_long(flash_size);
print_string(" Bytes\n");
switch(cap) {
case 0x12: memcpyc(flash_size_str, "256 KB", 7); break;
case 0x13: memcpyc(flash_size_str, "512 KB", 7); break;
case 0x14: memcpyc(flash_size_str, "1 MB", 5); break;
case 0x15: memcpyc(flash_size_str, "2 MB", 5); break;
case 0x16: memcpyc(flash_size_str, "4 MB", 5); break;
case 0x17: memcpyc(flash_size_str, "8 MB", 5); break;
case 0x18: memcpyc(flash_size_str, "16 MB", 6); break;
default: memcpyc(flash_size_str, "unknown", 8); break;
}
print_string_x(flash_size_str); write_char('\n');
flash_configure_mmio();
}
+17 -7
View File
@@ -25,6 +25,7 @@
extern __code const struct machine machine;
extern __xdata uint32_t flash_size;
extern __xdata char flash_size_str[10];
extern __xdata uint16_t crc_value;
__xdata struct machine_runtime machine_detected;
@@ -240,6 +241,15 @@ uint16_t strtox(register __xdata uint8_t *dst, register __code const char *s)
return dst - b;
}
uint16_t strcpy(register __xdata uint8_t *dst, register const char *s)
{
__xdata uint8_t *b = dst;
while (*s)
*dst++ = *s++;
*dst = 0;
return dst - b;
}
uint16_t strlen(register __code const char *s)
{
uint16_t l = 0;
@@ -1861,17 +1871,13 @@ void check_and_flash_update_image(void)
{
flash_read_jedecid(); // This initializes also __xdata flash_size variable
print_long(flash_size); print_string(" flash size detected.\n");
print_long(FIRMWARE_UPLOAD_START*2); print_string(" bytes needed for update.\n");
print_string_x(flash_size_str); print_string(" flash size detected. (1 MB is needed for image updating)\n");
if (flash_size < FIRMWARE_UPLOAD_START*2) {
print_string("Flash too small for updating; skipping update check\n");
return;
}
else {
print_string("Flash size ok.\n");
}
print_string("Checking for update image in flash... ");
// Check if an update image is in flash
flash_region.addr = FIRMWARE_UPLOAD_START;
flash_region.len = 0x100;
@@ -1884,7 +1890,7 @@ void check_and_flash_update_image(void)
__xdata uint16_t i = 0;
__xdata uint16_t j = 0;
__xdata uint8_t * __xdata bptr;
print_string("Identified update image. Checking integrity");
print_string("found update image! Checking integrity");
flash_init(0); // Re-initialize flash for non-DIO operation, otherwise flashing will fail
set_sys_led_state(SYS_LED_FAST);
crc_value = 0x0000;
@@ -1940,6 +1946,10 @@ void check_and_flash_update_image(void)
dest += 0x1000;
}
}
else
{
print_string("no update image found.\n");
}
}
void bootloader(void)