flashutil.c

来自「采用ST20 CPU的机顶盒的烧写程序」· C语言 代码 · 共 2,316 行 · 第 1/5 页

C
2,316
字号
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch on VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 1;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used to switch on VDD - continuing\n");
  }
}

static void switchOffVDD_mb317(void)
{
  volatile unsigned int* vpp_reg = (volatile unsigned int*)
    vmem_create((void*)0x07300000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch off VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 0;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used to switch off VDD - continuing\n");
  }
}

#elif defined(__sti5528__)

static void switchOnVDD_mb376(void)
{
  volatile unsigned char* vpp_reg = (volatile unsigned char*)
    vmem_create((void*)0x02300000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch on VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 3;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used to switch on VDD - continuing\n");
  }
}

static void switchOffVDD_mb376(void)
{
  volatile unsigned char* vpp_reg = (volatile unsigned char*)
    vmem_create((void*)0x02300000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch off VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 2;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used to switch off VDD - continuing\n");
  }
}

#endif

#endif

/*
 * Routines to write protect / enable a FLASH
 */
static void writeEnable(flashTarget_t* target)
{
  if (target->writeEnable)
  {
    target->writeEnable();
  }
}

static void writeDisable(flashTarget_t* target)
{
  if (target->writeDisable)
  {
    target->writeDisable();
  }
}

#if defined(__st200__)

#if defined(__stm8000__)

static void writeEnable_mb379(void)
{
  volatile unsigned char* ver_reg = (volatile unsigned char*)
    vmem_create((void*)0x07000000, 0x54, NULL, VMEM_CREATE_UNCACHED);
  if (!ver_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  volatile unsigned char* rw_reg = ver_reg + 0x50;
  if (*ver_reg >= 0x15)
  {
    *rw_reg |= 1;
  }
  if (OS21_SUCCESS != vmem_delete((void*)ver_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb379(void)
{
  volatile unsigned char* ver_reg = (volatile unsigned char*)
    vmem_create((void*)0x07000000, 0x54, NULL, VMEM_CREATE_UNCACHED);
  volatile unsigned char* rw_reg = ver_reg + 0x50;
  if (!ver_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  if (*ver_reg >= 0x15)
  {
    *rw_reg &= ~1;
  }
  if (OS21_SUCCESS != vmem_delete((void*)ver_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

static void writeEnable_mb392(void)
{
  volatile unsigned char* rw_reg = (volatile unsigned char*)
    vmem_create((void*)0x0200001C, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 1;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb392(void)
{
  volatile unsigned char* rw_reg = (volatile unsigned char*)
    vmem_create((void*)0x0200001C, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 0;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#elif defined(__stb5301__)

static void writeEnable_mb390(void)
{
  volatile unsigned char* epld_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)0x41400000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!epld_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *epld_virtual_ptr |= 3;
  if (OS21_SUCCESS != vmem_delete((void*)epld_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb390(void)
{
  volatile unsigned char* epld_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)0x41400000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!epld_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *epld_virtual_ptr &= ~1;
  if (OS21_SUCCESS != vmem_delete((void*)epld_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#elif defined(__stm8010__)

static void writeEnable_mb421(void)
{
  volatile unsigned char* epld_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)0x00C00000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!epld_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *epld_virtual_ptr |= 1;
  if (OS21_SUCCESS != vmem_delete((void*)epld_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb421(void)
{
  volatile unsigned char* epld_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)0x00C00000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!epld_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *epld_virtual_ptr &= ~1;
  if (OS21_SUCCESS != vmem_delete((void*)epld_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#if defined(OLD_MB426)
/* Configure PIO 0, pin 1 as output for enable, input for disable */
#define MB426_PIO_BASE 0x540A0000
#define MB426_PIO_PIN  1
#else /* Normal mb426 */
/* Configure PIO 5, pin 7 as output for enable, input for disable */
#define MB426_PIO_BASE 0x540A5000
#define MB426_PIO_PIN  7
#endif /* Types of mb426 board */

static void writeEnable_mb426(void)
{
  volatile unsigned char* pio_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)MB426_PIO_BASE, 0x100, NULL, VMEM_CREATE_UNCACHED);
  if (!pio_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  PIO_CONFIGURE(pio_virtual_ptr, MB426_PIO_PIN, PIO_CFG_OUT);
  if (OS21_SUCCESS != vmem_delete((void*)pio_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb426(void)
{
  volatile unsigned char* pio_virtual_ptr = (volatile unsigned char*)
    vmem_create((void*)MB426_PIO_BASE, 0x100, NULL, VMEM_CREATE_UNCACHED);
  if (!pio_virtual_ptr)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  PIO_CONFIGURE(pio_virtual_ptr, MB426_PIO_PIN, PIO_CFG_IN);
  if (OS21_SUCCESS != vmem_delete((void*)pio_virtual_ptr))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#elif defined(__stx5525__)

static void switchOnVDD_mb428(void)
{
  volatile unsigned char* vpp_reg = (volatile unsigned char*)
    vmem_create((void*)0x0980B000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch on VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 1;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used switch on VDD - attempting to continue with VDD unchanged\n");
  }
}

static void switchOffVDD_mb428(void)
{
  volatile unsigned char* vpp_reg = (volatile unsigned char*)
    vmem_create((void*)0x0980B000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!vpp_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to switch off VDD - attempting to continue with VDD unchanged\n");
    return;
  }
  *vpp_reg = 0;
  if (OS21_SUCCESS != vmem_delete((void*)vpp_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used switch off VDD - attempting to continue with VDD unchanged\n");
  }
}

#endif

#else

#if defined(__st40ra__)

static void writeEnable_mb293(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x00800000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 3;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb293(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x00800000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 0;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

static void writeEnable_mb374(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x07000010, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 1;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb374(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x07000010, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 0;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#elif defined(__sti5528__)

static void writeEnable_mb376(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x01300000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 0x3;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb376(void)
{
  volatile unsigned int* rw_reg = (volatile unsigned int*)
    vmem_create((void*)0x01300000, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 0x2;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

#elif defined(__stm8000__)

static void writeEnable_mb379(void)
{
  volatile unsigned char* ver_reg = (volatile unsigned char*)
    vmem_create((void*)0x07000000, 0x54, NULL, VMEM_CREATE_UNCACHED);
  volatile unsigned char* rw_reg = ver_reg + 0x50;
  if (!ver_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  if (*ver_reg >= 0x15)
  {
    *rw_reg |= 1;
  }
  if (OS21_SUCCESS != vmem_delete((void*)ver_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");
  }
}

static void writeDisable_mb379(void)
{
  volatile unsigned char* ver_reg = (volatile unsigned char*)
    vmem_create((void*)0x07000000, 0x54, NULL, VMEM_CREATE_UNCACHED);
  volatile unsigned char* rw_reg = ver_reg + 0x50;
  if (!ver_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to disable FLASH writes - attempting to continue\n");
    return;
  }
  if (*ver_reg >= 0x15)
  {
    *rw_reg &= ~1;
  }
  if (OS21_SUCCESS != vmem_delete((void*)ver_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used disable FLASH writes - continuing\n");
  }
}

static void writeEnable_mb392(void)
{
  volatile unsigned char* rw_reg = (volatile unsigned char*)
    vmem_create((void*)0x0200001C, vmem_min_page_size(), NULL, VMEM_CREATE_UNCACHED);
  if (!rw_reg)
  {
    fprintf(stderr, "flashutil: Failed to create virtual mapping to enable FLASH writes - attempting to continue\n");
    return;
  }
  *rw_reg = 1;
  if (OS21_SUCCESS != vmem_delete((void*)rw_reg))
  {
    fprintf(stderr, "flashutil: Failed to delete virtual mapping used enable FLASH writes - continuing\n");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?