⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flashutil.c

📁 采用ST20 CPU的机顶盒的烧写程序
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -