Skip to content

PY Music Box软件设计

一、软件架构

  1. 系统架构简介 使用hack版PY32F002的芯片Air001来实现,便宜量又大。M0架构,48MHz+32K Flash+4K RAM,价格<0.6RMB

  2. 系统架构框图

    graph TD
      PC-->|UART|PY32-->|HW-SPI|Flash
      PY32-->|HW-SPI|SD-Card
      MIC-->MX4466-->|ADC|PY32
      KEY-->|ADC|PY32
      PY32-->TIMER1-16-->|PWM|d8002
      PY32-->|I2C|LCD
    

二、模块分析

使用MDK + Air001 SDK LL 库.

  1. BSP部分 串口+LED+按键(AD Key)+Systick(延时程序用)

  2. SPI部分 SPI1接口,软硬spi驱动,使能分别对应flash/sd/rf2401(未单独引出)

  3. wav解码部分 playwav.c(读取和输出接口) 和 adpcm.c(ima-adpcm编解码)

  4. 录音部分 TOD

  5. 混音部分 TOD

  6. 无线传输部分 计划使用芯岭科技的XL2400(RMB~0.7),他家还有XL2401~XL2409(RMB1.3~1.9)的各种SOC,分别封装的NY8,51和M0内核

三、关键代码

四、采坑

  1. 超频(24M->48M)需谨慎,需要修改flash等待为1.可以直接使用Air001的模版。操作不当容易变砖.
  2. PY25H80的flash芯片有多重模式,扇区大小也不同,当选择快速读取指令时前面会多一个0x00的脏数据,不知何解。
  3. 硬件SPI速度快,初始化代码如下:

      /* SPI1 参数配置*/
      SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
      SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
      SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
      SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_HIGH;
      SPI_InitStruct.ClockPhase = LL_SPI_PHASE_2EDGE; //这里很重要,不然收码不对
      SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
      SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8;
      SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
      LL_SPI_Init(SPI1, &SPI_InitStruct);
    

  4. 串口下载flash的时候,最后每包的补足为需要为0x00,否则校验码会错误(累加校验).

  5. 如果下载文件大小超出flash容量会重复覆盖。
  6. 下载速度,文件大小633KB:
  7. Uart-1M + SPI-6M =35~40秒
  8. Uart-512K + SPI-6M =45秒
  9. 上位机触发进入下载模式的函数要优化,要多发送几次并排除乱码