linyu0395

  • 2021-02-23
  • 发表了主题帖: 【GD32E503评测】+ cJSON移植测试

            JSON, 全称是”JavaScript Object Notation”, 它是一种基于文本,独立于语言的轻量级数据交换格式, XML也是一种数据交换格式,但是风格上我个人更喜欢JSON,因为XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记。           JSON有两种表示结构,对象和数组。 对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组 数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成。没了解过JSON的可以看看这个网站,有比较详细的介绍说明。 http://www.json.org.cn/             单片机解析JSON的库有很多,这是在网络上找的,大家可以参考一下。             因为对cJSON比较熟悉,所以我选择了cJSON移植到GD32E503开发板上。           cJSON是开源的,在github上可以下载  https://github.com/DaveGamble/cJSON         cJSON移植也比较简单,就是把这4个文件,cJSON .c、cJSON.h、cJSON_Utils.h、cJSON_Utils.c,添加到项目文件中去就可以了,加入测试程序,串口打印出数据。             cJSON我在实际应用当中也经常碰到一些问题,最主要的还是内存分配。因为cJSON用的是编译器自带的malloc内存分配,所以Head堆空间要配置大一些,否则文件大了,容易出现内存不足而导致分配失败。本来计划用QSPI接口的SPIflash来存储解析,可是查看了开发板,发现很多IO口都已经分配殆尽。cJSON文件太大还是很耗内存资源的,如果用支持QSPI的可寻址这个特性来读取,效率就比较高了,因为cJSON解析JSON文件的时候,是要把整个文件都放在内存区域才能解析,也没办法预取部分来解析,所以对于内存空间较小的MCU,还是不推荐使用。           最后附上源代码                   

  • 2021-02-22
  • 发表了主题帖: 【GD32E503评测】+ SX1278模块移植

            LoRa 的名字是远距离无线电(Long Range Radio),作为一种线性调频扩频的调制技术,最早由法国几位年轻人创立的一家创业公司 Cycleo 推出,2012 年 Semtech 收购了这家公司,并将这一调制技术封装到芯片中,基于 LoRa 技术开发出一整套 LoRa 通信芯片解决方案,包括用于网关和终端上不同款的 LoRa 芯片,开启了 LoRa 芯片产品化之路。   目前多个项目有用到SX1278模块,应用于远程水电抄表、远程智能灯控等,应用性比之前的CC1101有着更好的通信距离和抗干扰能力,LoRa 的特性总结:   传输距离:城镇可达 2-5 Km , 郊区可达 15 Km 。   工作频率:ISM 频段包括 433、868、915 MH 等。   标准:IEEE 802.15.4g。   调制方式:基于扩频技术,线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)能力,semtech 公司私有专利技术。 容量:一个 LoRa 网关可以连接上千上万个 LoRa 节点。   此次测试的SX1278 Lora模块购买于淘宝,采用SPI通讯接口,还用到DIO0作为空中载波的判断,程序我年前已经适配过了,但是开发板放在老家忘记拿回来了,所以没有配图,只有源代码。   接口说明: PA7—>SX1278_MOSI PA6—> SX1278_MISO PA5—> SX1278_SCK PE3—> SX1278_CS PE6—> SX1278_RST PB0—> SX1278_DIO0   源代码的稳定性,我已经在多个项目上稳定运行很久了,暂时还没有发现BUG,刚接触SX1278的网友们可以下载参考一下。  

  • 2021-01-22
  • 发表了主题帖: 【GD32E503评测】+ W5500网络模块移植

    现在搞物联网的趋势日益增长,我在项目中也经常接触到网络。因为GD32E503V这款MCU没有内置网络接口,所以我通过SPI接口扩展了W5500模块来实现网络通讯。          W5500 芯片是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片,是韩国WIZnet(微知纳特)发布全硬件TCP/IP协议栈以太网接口芯片。W5500 支持高速标准4线SPI接口与主机进行通信,该 SPI 速率理论上可以达到 80MHz。其内部还集成了以太网数据链路层(MAC)和10BaseT/100BaseTX 以太网物理层(PHY),支持自动协商(10/100-Based全双工/半双工)、掉电模式和网络唤醒功能。与传统软件协议栈不同,W5500内嵌的8个独立硬件 Socket 可以进行8路独立通信,该8路Socket的通信效率互不影响,可以通过 W5500 片上32K 字节的收/发缓存灵活定义各个Socket的大小。   本来计划通过开发板外引的IO口来扩展SPI接口,最后查看了半天的原理图,把相关SPI的IO口都一个个标注出来,才发现MCU自带的3个SPI都已经用掉了,一个是SPI Flash,一个是SDIO的SD卡,一个是复用成I2S的音频模块,想找第二公用功能以及remap都找不到能用的,无奈之下,只能焊掉SPI Falsh,也就是GD25Q16芯片,W5500的一直功能才得以实现。   W5500的驱动库,可以到github上去下载:https://github.com/Wiznet/ioLibrary_Driver   这是我新建的W5500的项目结构 硬件连接接口如下: PA7—>W5500_MOSI PA6—>W5500_MISO PA5—>W5500_SCK PE3—>W5500_CS PE6—>W5500_RST   调试过程中我自己还发现了一个问题,因为此次调试的W5500是模块形式组成,所以用杜邦线来接到开发板,以前的项目W5500都是直接layout到板上。同样的程序,在STM32上跑得很欢快,但是在这块开发板为啥死活都出不来呢……   经过不断的排查再排查,问题居然出在杜邦线上,可能我用的杜邦线质量比较差(顺便吐槽一下,某宝上的杜邦线压根找不到质量好的,如果坛友有推荐的,还麻烦介绍一下,谢谢哈),后来用了另外一种杜邦线,就可以了。本来信心满满地认为调试只要半天就可以了,后来在这个问题上至少浪费了我3天的时间……   主循环里,我做了个Socket Server的服务,端口12345,用网络调试工具连上去,就可以双向发送数据了。有兴趣的可以下载完整项目代码参考一下。  

  • 2021-01-20
  • 回复了主题帖: 【GD32E503评测】+ Littlefs移植

    yang377156216 发表于 2021-1-19 17:10 芯片自己的 flash 用这个不知道能不能充当  模拟EEPROM 的作用 ? 
    理论上可行  但是内部的flash有的不是连续的块  这样操作起来就有问题

  • 2021-01-18
  • 加入了学习《DIY 离线语音空调助手,懒人系列》,观看 DIY离线语音空调助手,空调码库一键匹配,支持温度调节

  • 2021-01-14
  • 发表了主题帖: 【GD32E503评测】+ Littlefs移植

      littlefs 是 ARM 官方推出的,专为嵌入式系统设计的文件系统,相比传统的文件系统,littlefs 具有以下优点: 自带擦写均衡 支持掉电保护 占用的 RAM/ROM 少 littlefs 自带的擦写均衡和掉电保护使开发者可以放心的将文件系统挂载到 nor flash 上。 https://github.com/littlefs-project/littlefs  这是github上的开源项目地址,有兴趣的可以关注下载。   littlefs的移植也非常简单,项目上添加lfs_util.c和lfs.c文件,然后配置参数如下: #define BUFFER_SIZE 256 #define BLOCK_SIZE 4096 #define BOLCK_NUM 512 // 2M--512 8M--2048 16M--4096 #define LOOKAHEAD_SIZE (lfs_size_t)(BOLCK_NUM / 8) lfs_t lfs; lfs_file_t lfs_file; static int lfs_flash_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size); static int lfs_flash_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size); static int lfs_flash_erase(const struct lfs_config *c, lfs_block_t block); static int lfs_flash_sync(const struct lfs_config *c); const struct lfs_config cfg = { // block device operations .read = lfs_flash_read, .prog = lfs_flash_prog, .erase = lfs_flash_erase, .sync = lfs_flash_sync, // block device configuration .read_size = BUFFER_SIZE, .prog_size = BUFFER_SIZE, .block_size = BLOCK_SIZE, .block_count = BOLCK_NUM, .cache_size = BUFFER_SIZE, .lookahead_size = LOOKAHEAD_SIZE, .block_cycles = 500, }; 然后对接口函数进行补充 static int lfs_flash_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) { uint32_t addr; addr = ((uint32_t)block << (uint32_t)12); addr += off; #ifdef enable_flash_debug char message[64]; if(Flash_Debug_Flag) { memset(message, 0x00, sizeof(message)); sprintf(message, "Flash Read Block is %d, Offset is %d, Size is %d\n\r", block, off, size); debug_log(message, strlen(message)); } #endif spi_flash_buffer_read((uint8_t *)buffer, addr, size); return LFS_ERR_OK; } static int lfs_flash_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) { uint32_t addr; addr = ((uint32_t)block << (uint32_t)12); addr += off; // SPI_Flash_Write(addr, size, (uint8_t *)buffer); #ifdef enable_flash_debug char message[64]; if(Flash_Debug_Flag) { memset(message, 0x00, sizeof(message)); sprintf(message, "Flash Prog Block is %d, Offset is %d, Size if %d\n\r", block, off, size); debug_log(message, strlen(message)); } #endif spi_flash_buffer_write((uint8_t *)buffer, addr, size); return LFS_ERR_OK; } static int lfs_flash_erase(const struct lfs_config *c, lfs_block_t block) { #ifdef enable_flash_debug char message[64]; if(Flash_Debug_Flag) { memset(message, 0x00, sizeof(message)); sprintf(message, "Erase Block is %d\n\r", block); debug_log(message, strlen(message)); } #endif spi_flash_sector_erase(block << 12); return LFS_ERR_OK; } static int lfs_flash_sync(const struct lfs_config *c) { return LFS_ERR_OK; } 开发板中的spi flash的型号是gd25q16,空间大小是2M 字节,相应的驱动,开发板上附带的例程已经有了。   运行littlefs的测试程序,用串口debug输出结果 littlefs已经在我的多个项目中使用并量产了,到目前为止还没发现过大问题,就是写入文件有时候耗费的时间比较多,特别是文件数量比较多的时候,感觉更明显。 附上完整的项目文件供大家参考,有什么问题也大家也可以互相讨论一下:

  • 2021-01-11
  • 发表了主题帖: 【GD32E503评测】+ 上手初体验

    我非常有幸的成为兆易创新科技公司的GD32E503V-EVAL开发板的评测人员。   因为我本人从事的是智能家居产品的软硬件设计开发,工作中接触到的网络、RF通讯比较多,所以我的总测评流程计划如下: 移植网络W5500 (实现基本的网络通讯框架以及Tftp下载,实现远程固件更新和文件下载到SpiFlash,文件系统采用Littlefs) 移植Lora sx1278模块 (实现基本的RF模块初始化配置和通讯) 测试QSPI接口解析JSON速度 (基于QSPI接口的SpiFlash的JSON文件的解析) 对外设接口的驱动 收到开发板有些时日了,因为年尾了,手头上的项目有点紧,赶紧抽空对开发板来一个第一轮的简单开箱上电评测。   开发板的外包装档次还是比较高的,值得永久珍藏。 再来看主角的全貌,PCB布板干净整洁,自带仿真器,资源丰富,有LED、按键、Nand Flash(一开始没找到,原来藏在LCD下面)、LCD、USB、EEPROM、数字音频模块等,还引出了所有的IO口,作为一块开发板,物尽其用。 首先打开兆易官网的链接找到GD32E5的资料 http://www.gd32mcu.com/cn/download/0?kw=GD32E5 把这些资料全部下载到电脑。MDK的包管理器里还找不到GD32E50x的包,所以先安装GD32E50x ADD-ON文件夹里的DFP文件。 然后就可以打开下载好的GD32E50x-Demo_Suites目录的例程 这里我选择了第一个GPIO_Running_LED来进行开箱测试。 看原理图,四个LED等分别对应的IO口是PC0、PC2、PE0、PE1 打开MDK的工程文件 可以看到工程中初始化的LED就是对应的原理图中的四个IO口,看来例程的代码都是完全匹配开发板的。然后编译运行……   哎呀,怎么仿真出错了,噢,对了,还没有选仿真器呢!打开仿真器设置界面,怎么没有GD-LINK呢?难道是驱动没有装,但是没看到官网有提供驱动下载啊! 看了GD-Link的文档说明,才发现就是基于CMSIS-DAP的仿真器接口 仿真器上选择了CMSIS-DAP,运行,开发板上的4个LED逐个点亮然后灭掉 至此,第一轮的上电开箱评测结束,后续的会陆陆续续补上来。  

  • 2021-01-07
  • 回复了主题帖: 了解PI最新产品,评论、下载抢楼好礼送!

    我从事智能家居行业,设计过智能开关的86盒底座的电源板,本身空间受限,又要多路继电器输出,导致开关电源选型上比较费劲,又要考虑emc电容的大小位置以及工频滤波器电感等,看到MinE-CAP的介绍, 适用于超大功率密度AC/DC变换器的大容量电容小型化和浪涌管理IC ,可以较少50%的输入电容容量,内置了NTC,输入宽电压,各项指标参数也非常不错。

  • 回复了主题帖: 了解PI最新产品,评论、下载抢楼好礼送!

  • 2020-12-30
  • 回复了主题帖: 测评入围名单:免费评测GD32E503V-EVAL(M33、带屏)

    个人信息无误,确认可以完成评测计划,收到后,我们就会安排寄送开发板。

  • 2020-12-14
  • 加入了学习《5系列校准器介绍》,观看 5730A介绍视频

  • 回复了主题帖: 出一批terasic tr4 stratix iv fpga开发板 ic验证

    请不要说出价格  让我没有这条心

  • 2020-12-07
  • 回复了主题帖: 论坛小程序上线!扫码解锁逛坛新姿势啦!!

    手机浏览了一会 暂时没发现什么问题  挺流畅的

  • 2020-11-30
  • 回复了主题帖: 美信基础模拟IC APP下载 助力您创新模拟设计!评论、抢楼全有礼!

    一开始通过微信扫描,发现不能跳转,后来直接用浏览器扫描就可以下载了

  • 回复了主题帖: 美信基础模拟IC APP下载 助力您创新模拟设计!评论、抢楼全有礼!

    那个二维码扫描下载APP  无法使用啊

  • 2020-11-11
  • 加入了学习《泰克MSO6B系列创新型混合信号示波器》,观看 泰克 6 Series B MSO Jitter Demo

  • 2020-10-30
  • 加入了学习《泰克高级电源测试》,观看 6 Series B MSO Power Distribution,Power Supplies and 3-Phase Power

  • 加入了学习《泰克高级电源测试》,观看 电源完整(PI)设计和测试

  • 2020-10-09
  • 回复了主题帖: 【中秋佳节话中秋】吃吃月饼聊聊天,还有抢楼好礼送给你!

    6.今年的中秋节,你打算如何度过呢? 我只有一个目的,就是回家,和家人能吃一下团圆饭,在家陪陪父母,带父母出去逛逛。 看着孩子一天天长大,也看着父母一天天变老,中秋佳节,团圆美满

  • 2020-09-30
  • 回复了主题帖: 颁奖:观看赢好礼——京东卡等你拿! 活动颁奖啦

    感谢eeworld   确认中奖了

最近访客

< 1/2 >

统计信息

已有194人来访过

  • 芯币:474
  • 好友:--
  • 主题:8
  • 回复:76
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言