你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

亚马逊Dash和其他STM32 ARM的探索(下)

[复制链接]
eefishing 发布时间:2019-2-25 22:14
本帖最后由 eefishing 于 2019-2-25 22:35 编辑



I2S PCM over UART


我把I2S的数据转储到Dash的串行控制台,并将其记录到一个文件中。经过几个小时的等待,我终于能够编写一个小的Node.js程序,将ASCII转换成二进制BLOB大文件。将它导入Audacity中,得到了这个漂亮的波形。太糟糕了,听起来像“老鼠叫”。


QQ浏览器截图20190225215109.png


这里是代码
  1. var fs = require('fs');
  2. var convertHex = require('convert-hex');
  3. var tokenizer = require('tokenizer');

  4. var t = new tokenizer();
  5. t.addRule(/^0x[0-9A-Fa-f]+$/, 'half');
  6. t.addRule(/^\w+$/, 'junk');
  7. t.addRule(/^\s+$/, 'whitespace');
  8. t.addRule(/^.$/, 'whitespace');

  9. var pcm = fs.createWriteStream('pcm.raw');

  10. var bytes = [];
  11. t.on('token', function(token, type) {
  12.         if (type == 'half') {
  13.             if (token.content.length == 6) {
  14.                 var b = convertHex.hexToBytes(token.content);
  15.                 bytes.push(b[0], b[1]);
  16.             }
  17.         }
  18. });

  19. t.write(fs.readFileSync('../audio.log', { encoding: 'utf8' }));

  20. t.on('data', function() { });

  21. t.on('error', function(error) {
  22.         console.log(error);
  23.         pcm.write(new Buffer(bytes));
  24.         pcm.end();
  25. });

  26. t.on('end', function() {
  27.         console.log("DONE");
  28.         pcm.write(new Buffer(bytes));
  29.         pcm.end();
  30. });

  31. t.end();
复制代码



Amazon Dash I2S bit banging

在过去的几个晚上里,我一直在试图拼凑让麦克风正常工作所必需的代码。我不太了解时钟、PLLs、DMA,甚至I2S,所以对于哪些代码应该放在哪里,这让我感到焦头烂额。

WICED SDK中的STM32F2代码库缺少一个platform_i2s.c驱动程序。我使用STM32F4的platform_i2s.c,删除了那些让我困惑的东西。在调用我的新平台I2S .c之前,我编写了一个短小的ADMP441驱动程序来设置正确的GPIO,它将在这里设置I2S块和DMA通道。

我一直在努力让DMA在完成一个麦克风数据块时生成一个中断,因此我关闭了该代码,转而专注于通过等待SPI RX中断来获取数据,并有效地轮询总线以获取数据。我只得到0或挂起进程,所以我怀疑要么是时钟/PLL设置错误,要么是麦克风没有启用。

我没有逻辑分析仪(实际上我今天在eBay上买了一个便宜的),所以我无法验证Dash外露的CLK和WS引脚上的数据是波形还是恒压。我想,一旦逻辑分析器到达邮件中,我将能够使用热空气枪来移除麦克风,并将探针插入其中,以帮助调试DMA问题。

不管怎样,今天我设法从I2S SPI端口获得了实际数据。
QQ浏览器截图20190225215541.png

我不知道这是不是真实的PCM数据,但它肯定比一堆没有强。


Dash I2S microphone

我一直在努力迫使Amazon Dash的I2S麦克风使用WICED SDK生成一些IRQs,但到目前为止还没有成功。

我把芯片EN (PC1)设置到很高,可以看到它在我的DMM上保持很高。我已经通过stm32f2xx_spi_c库调用打开了I2S PLL,我在SCK (PB10)上测量了1.5V——然而参数没有范围,我希望这是一个波形,而不是恒压。

这是我的GitHub repo的一个临时补丁。大部分代码是从WICED SDK中的STM32F4xx文件夹复制和粘贴的。




GitHub repo

我在这里建立了一个GitHub存储库:http://github.com/gtalusan/redash。这有建立一个固件的指令,并部署它的亚马逊Dash与ST-Link V2。




SPI is gross.

我试图弄明白为什么我只能成功地写和擦除Dash闪存的一个扇区一次。左边是M25P16的数据表,中间是Broadcom的WICED SDK用来擦除扇区和整个芯片的SPI命令,右边是SST25VF016B的数据表。
QQ浏览器截图20190225220520.png
没有成功!



Amazon Dash SPI Flash

QQ浏览器截图20190225220647.png
我设法使SPI闪存与微米M25P16芯片的破折号。0x202015是M25P16在请求其总线标识时返回的神奇的JEDEC数字。太棒了!




GPIO mapping

我已经将platform_gpio_pins表从Cottonelle.bin映射到一些可读的源代码。在与maximus64的工作进行交叉引用之后,我们得到:
QQ浏览器截图20190225220757.png
我们现在有一些SPI GPIO的潜在候选。WICED SDK对于GPIO在其他数据结构中声明和引用的方式是快速而松散的,因此我可能需要更多的字节来确定是否能够收集关于platform_spi_mapping_t和wiced_spi_device_t的更多信息。


More GPIO table digging

在这里,我在左侧对齐了一些修改后的GPIO pin声明,并将它们映射到virgin cotton .bin。我怀疑紫色下划线就是数组结束的地方。我认为GPIO_TypeDef *超出了范围。
QQ浏览器截图20190225221002.png
QQ浏览器截图20190225221010.png


Finding GPIO

在左边,我们有一个来自WiCED SDK 2.4.1二进制文件的示例应用程序,它在改变了一个字节之后就会发生变化,因此我们可以找到通往GPIO表的方法。
中间是示例应用程序。
在右边,一个类似的转储来自cottonele .bin,来自dekuNukem的固件转储……
现在做一些映射…
8599251456470078034.png



Backing up the flash
是时候备份闪光灯了。我试图使用st-flash、OpenOCD、pystlink和st-util+gdb来获得大量的闪存,以防我想回去玩Amazon的软件。转储文件中包含了尼尔字节,因此可能存在一些读取保护。
OpenOCD的手册有一个很好的命令解锁flash:

stm32f2解锁0

这将产生一个按钮的输出:

  1. Debug: 19140 55145 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
  2. Debug: 19141 55145 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
  3. Debug: 19142 55146 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
  4. Debug: 19143 55148 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
  5. Debug: 19144 55148 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
  6. Debug: 19145 55149 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
  7. Debug: 19146 55150 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
  8. Debug: 19147 55150 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
  9. Debug: 19148 55151 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
  10. Debug: 19149 55152 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
  11. Debug: 19150 55152 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
  12. Debug: 19151 55153 hla_target.c:752 adapter_read_memory(): adapter_read_memory 0x40023c0c 4 1
  13. Debug: 19152 55154 target.c:2226 target_read_u32(): address: 0x40023c0c, value: 0x00010000
  14. Debug: 19153 55154 stm32f2x.c:219 stm32x_wait_status_busy(): status: 0x10000
复制代码
. .然后我就得到了一个空的flash,它是完全可以倾倒的,不会出错。神奇。



原创:George
转自:http://hackaday.io/project/9828/logs?sort=newest&page=1


QQ浏览器截图20190225214845.png
QQ浏览器截图20190225215943.png
收藏 评论0 发布时间:2019-2-25 22:14

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版