联盛德WIFI 代码FLS+音频BIN固件合并

联盛德W600 FLASH空间分配如图,这颗芯片只有1M的FLASH空间,如果使用他默认的空间,那基本就用完了整个FLASH,如果想添加2 3百K的语音,必须对IMAGE进行裁剪,然后把MP3文件合并到IMAGE升级区域之后,并且在用户区之前,我们代码生成的FLS文件包含了系统参数 二级BOOT区域等等 直到用户区域。进行OTA升级的时候我们往往不修改语音而仅仅升级IMAGE区域即可,所有芯片第一次烧录的时候需要烧录整个FLS文件,这时候FLS文件就需要包含MP3语音资源等。

   这里我们需要做的是把包含所有MP3的BIN文件合并到编译代码时候生成的FLS文件后面,以便我们在程序中读取这些MP3语音资源进行提示音等等播放。

合并文件需要在LINUX下进行,我们生成的IMG文件是360K,8+32+4+4+4+4+360+360 = 776K,也就是说MP3资源必须放在FLASH的776K后面,我程序选择779K之后,MP3转换BIN文件以及合并FLS脚本如下:

#!/bin/sh

echo "Start conversion..."

flash_logic_addr=$((779*1024))
flash_end_addr=$((1024*1024-1024*68))
offset=0x1fc8
start_addr=$((0x8000000+$flash_logic_addr+$offset))
cd in
cp WM_W600.FLS ..
echo "coping file WM_W600.FLS ..."
cd ..
cd mp3
files='*.mp3'
rm -rf mp3_res_info.c

flash_addr=$start_addr
size=0

echo "//   音频数据起始地址(flash实际地址)在脚本 start_addr修改  默认779K处">> mp3_res_info.c
echo "//  逻辑地址=物理地址+0x1fc8" >> mp3_res_info.c
echo "//  以下结构体地址 大小由脚本自动生成不可修改" >> mp3_res_info.c
echo " ">> mp3_res_info.c

echo "
/*!
 *  \ brief
 *  tts_info_t  音频数据结构
 */
typedef struct
{
  uint8_t *logic_addr;
  uint32_t size;
} tts_info_t;
" >> mp3_res_info.c
#echo "//mp3file(文件名)                 flash logic addr(程序使用的地址)            size(bytes)">> mp3_res_info.txt
echo " ">> mp3_res_info.c
res_total=0
for filename in $files
do
  size=$(wc $filename -c|cut -d " " -f1)
  res_total=$(($size+$res_total))
  echo "tts_info_t tts_"${filename%.*}" = {" >> mp3_res_info.c
  echo "merge file $filename ..."
#echo  $size
 # printf  "%x" $size > size.bin
#dd if=size.bin of=temp.bin bs=4 count=1 conv=csync
 # dd if=WM_W600.FLS of=out.bin bs=$flash_logic_addr count=1 conv=sync
  cat $filename >> mp3.bin
  # printf  "%-35s %-40s %-20s \n" ${filename} $flash_addr  $size >> mp3_res_info.txt
  # echo "filesize:" $size
   
  echo "  .logic_addr = "$flash_addr "," >> mp3_res_info.c
  echo "  .size = " $size",">> mp3_res_info.c
   echo "};" >> mp3_res_info.c
    echo " ">> mp3_res_info.c
flash_addr=$(($size+$flash_addr))
done

if [ $(($res_total+$flash_logic_addr)) -gt $flash_end_addr ];then
    echo ""
    echo "mp3文件过大 ,超出" $(($(($res_total+$flash_logic_addr)) - $flash_end_addr))"bytes"
   echo "#error :mp3文件过大 ,超出" $(($(($res_total+$flash_logic_addr)) - $flash_end_addr))"bytes">> mp3_res_info.c
fi
mv mp3_res_info.c ..
mv mp3.bin ..
cd ..

dd if=WM_W600.FLS of=out.bin bs=$flash_logic_addr count=1 conv=sync
cat out.bin mp3.bin > BYLE_W600_ALL.FLS
curtime=$(date "+%y%m%d_%H%M%S")
mv BYLE_W600_ALL.FLS  w600_all_$curtime.FLS
echo $curtime
rm -rf out.bin mp3.bin WM_W600.FLS
cd out
rm -rf *.FLS
cd ..
mv w600_all_$curtime.FLS out
mv mp3_res_info.c out
echo "Conversion finish!"

运行之后,会在out目录生成一个.c文件  里面包含了个个mp3文件资源的起始逻辑地址以及对应的长度,在程序中直接读取就可以获取MP3资源了。

同时,在OUT文件夹生成了合并MP3文件后的FLS文件,我们芯片第一次烧录这个文件,就把所有资源代码都烧录在了FLASH里边,以后仅仅升级img即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值