单片机/MCUwilliam hill官网
直播中

harchy

12年用户 53经验值
擅长:光电显示 控制/MCU
私信 关注

二进制文件合并工具软件PackagingTool

本帖最后由 harchy 于 2023-12-6 14:35 编辑

PackagingTool软件介绍:
该软件可进行多个二进制文件的合并,可以打包bin档、字库dot档、jpg、avi、mp3等。可自由添加文件、删除、调整文件排列顺序,并且可以在任何一个文件前面插入偏移地址,方便索引调用;嵌入式固件包含两部份,分别为BootLoader固件和App固件,BootLoader固定,App编译之后需要再按照偏移地址烧录到一起,以往烧录方式较为麻烦,可以使用该软件合并之后再一次烧录可大大提高效率!同时保存列表,后续可重复导入使用,搭配瑞佑RA8889液晶控制芯片一起使用用于打包图片档十分方便!

  • 功能:可将多个二进制文件的合并与打包,比如bin档、字库dot档、图片jpg、视频avi等;
  • 特色:文件可添加、排序、删除,插入偏移地址,满足各种FLASH烧录需求;
  • 特色推荐:可保存列表,方便二次编排,省去研发频繁调整烦恼!
  • 适用平台:Win7/WiN10/WiN11等
  • 文件大小:362K / 单文件 / 绿色版

主界面:


关于前置偏移:偏移地址自由设定,是否添加文件信息可选,如下图:
页眉.png

若选择此项,则会将合并的文件地址和大小信息写到前置偏移地址,占4Bytes,写入的数据格式为LSB->MSB,该目的方便单片机索引访问。

下面举例单片机如何读取jpg图片出来显示,我们先将一系列jpg图片打包好bin档并且烧录到瑞佑的RA8889下挂的FLASH芯片,单片机可以按8个字节/次读取到文件的地址和大小:
  1. //获取图片的地址或者大小信息,共4个字节,再合并成一个数值返回
  2. unsigned long Get_Picture_Address_Size(unsigned long flash_addr)
  3. {
  4. unsigned long temp;
  5. unsigned short i;
  6. unsigned int data_buffer[4];  //存放从FLASH读取出的数据   
  7. Enable_SFlash_SPI();
  8. if(FLASH_BUS==0) SPIM_Select_Bus_0(); //总线BUS0
  9. else  SPIM_Select_Bus_1(); //总线BUS1
  10. #ifdef OVER_128Mb
  11. Select_nSS_drive_on_xnsfcs3(); //使用CS3位置的FLASH
  12. #else
  13. Select_nSS_drive_on_xnsfcs2(); //使用CS2位置的FLASH
  14. #endif
  15. RA8889_SPI_Flash_WREN(); //写入使能
  16. nSS_Active();
  17. delay_us(1);
  18. SPI_Master_FIFO_Data_Put(0x03);
  19. delay_us(1);
  20. #ifdef OVER_128Mb   //32bit 寻址
  21. SPI_Master_FIFO_Data_Put(flash_addr>>24);
  22. SPI_Master_FIFO_Data_Put(flash_addr>>16);
  23. SPI_Master_FIFO_Data_Put(flash_addr>>8);
  24. SPI_Master_FIFO_Data_Put(flash_addr);
  25. #else    //24bit 寻址
  26. SPI_Master_FIFO_Data_Put(flash_addr>>16);
  27. SPI_Master_FIFO_Data_Put(flash_addr>>8);
  28. SPI_Master_FIFO_Data_Put(flash_addr);
  29. #endif
  30. for(i=0;i<4;i++)
  31. {
  32. data_buffer[i] = SPI_Master_FIFO_Data_Put(0xff);
  33. }
  34. temp = data_buffer[3]<<24;  
  35. temp += data_buffer[2]<<16;
  36. temp += data_buffer[1]<<8;
  37. temp += data_buffer[0];
  38. nSS_Inactive();   
  39. while(RA8889_SPI_Flash_RDSR()& 0x01);
  40. RA8889_SPI_Flash_WRDI();
  41. Disable_SFlash_SPI();
  42. return(temp);
  43. }

单片机读取到jpg存放地址和图片大小之后,再传给RA8889,即可显示:
  1. //从FLASH读取第n张图片出来显示
  2. int Show_Picture(unsigned int pic_num)
  3. {
  4.         unsigned long pic_addr, pic_size;
  5.         pic_addr = Get_Picture_Address_Size(0x0000+pic_num*8);                        //读取到第n个图片地址的值
  6.         pic_size = Get_Picture_Address_Size(0x0004+pic_num*8);                        //读取到第n个图片大小的值
  7.         SPI_NOR_initial_JPG_AVI (1,0,FLASH_BUS,FLASH_CS,1);
  8.         
  9.         #ifdef OVER_128Mb         
  10.                 switch_24bits_to_32bits(FLASH_BUS,FLASH_CS);
  11.                 IDEC_Select_SFI_32bit_Address();
  12.         #endif
  13.         JPG_NOR (pic_addr,pic_size,canvas_image_width,0,0);        
  14.         return 1;        
  15. }

该软件特色功能是打包成bin档的同时还会将编排好的列表保存在.h文件中,后续要使用时可以再读取回来,方便研发调试!省去频繁导入与调整文件顺序的麻烦,可提高工作效率!
方法:导入存档>>打开文件选择框>>选择已保存的.h文件。

单片机要调用图片显示,碰到要调用jpg、avi等图资,由于此类文件大小不一,若没有做FAT文件系统就只能做成固定调用,后续投产之后就不方便再变更图片资源,而使用该软件就可以在打包文件的同时将文件大小和地址信息一同保存,单片机只需要按规律寻址即可,比如在使用瑞佑的RA8889,有些用户想量产之后还想再做升级变更图资,用此法即可很容易解决!

操作说明示范:
Guide.gif


  • 主界面.png

回帖(1)

harchy

2023-12-5 23:42:32
本帖最后由 harchy 于 2023-12-6 23:21 编辑

改版说明:
1. 更新偏移地址设定逻辑,可以设定任一文件的偏移地址,满足MCU的IAP BootLoader Code和Application Code合并时需要固定偏移功能(比如0x00001000)。
2.  调整输出的.h格式,导出同时构建枚举函数,MCU可直接引用该头文件进行索引,该文件与Image Tool导出来的.h格式一致,可兼容;另外增加图片宽度和高度信息。
原文地址

主界面.png

举报

更多回帖

发帖
×
20
完善资料,
赚取积分