所有软件外包项目 Gray arrow bg RP2040的PIO开发

RP2040的PIO开发

发包方 : Xihaha2018 接包方 : Qiangzi 状态 :项目验收中
项目编号 : 232189
项目预算 : ¥3,000-5,000
开发周期 : 30 天
技能 : C++ C++
类别 : -
发布日期 : 2023-10-14

描述

硬件平台:树莓派官方的RP2040的PICO开发板
开发语言:C
实现功能:
1、使用RP2040的PIO功能对14个IO进行并行采样(采用120M时钟,也就是外部输入的30M时钟做四倍频配置),并把
数据缓存到内存的buffer,buffer深度为1024,采用乒乓buffer交替缓存。
2、使用RP2040的PIO功能对14个IO进行并行输出(采用120M时钟),可以先做一个两个1024长度的数组(buffer),然后乒乓将buffer读出从14个IO并行输出。
3、固件要支持16M的SPI FLASH

交付:
1、全套源代码和RP2040固件;
2、程序说明文档;
3、使用文档,包括如何从零安装RP2040的C代码开发环境,需要安装的软件提供下载链接。能够使我方人员从零建立RP2040的C代码开发环境并在树莓派官方的RP2040开发板成功运行上述代码。

要求:
1、需要开发者做过RP2040的C代码开发,不然从头学着弄效率会比较低。
2、工期一个月。

[2023-12-26 15:23:34 增加内容] 实现功能: 1、 串口AT指令收发: 支持一个AT指令交互的专用串口,波特率为115200。只需要做如下一条AT指令的实现: 发送命令: AT+CGSN=1 模块返回: AT+CGSN=1 +CGSN:868744036640526 OK 注意 1)、上述每条指令都以换行符作为结束,也就是ASCII码的0D 0A。 2)、AT指令的答复的第一行就是将接收的命令打印出来,第二行是应答内容,第三行发送OK。 3)、需要注意的是RP2040上电初始化后AT指令的串口交互一直是存在的,其他的功能不能影响AT指令的串口交互响应速度。 2、 串口十六进制收发: 支持一个十六进制交互的专用串口,波特率为115200。 起始标志 命令单元 CRC校验 结束标志 模块地址 命令编号 命令类型 命令体长度 命令数据 0x7E 1Byte 1Byte 1Byte 1Byte nByte CRC-16 0x7F 各单元详细说明如下: 1) 模块地址为0x00; 2) 命令编号暂定为A0; 3) 命令类型:对于用户侧,0x01表示设置,0x00表示查询。对于模块端收到串口命令后的应答,定义如下: 应答标志编码定义 编码 含义 备注 0X00 成功 0X01 命令号不支持 中频板不支持此命令 0X02 命令数据错 命令格式错误 0X03 CRC校验错 命令体的CRC校验出错 4) 针对协议中的“命令单元”进行校验(从“命令单元”的第一个字节计算到最后一个字节),采用CCITT推荐的16位的x16+x12+x5+1(0x1021)。生成2字节的CRC校验和(低字节在前,高字节在后)。发送端必须根据“命令单元”生成2字节的CRC检验和,接收端收到完整的数据包后,根据“命令单元”生成新的CRC检验和,如果新的CRC校验和与收到的校验和相等则表明该数据包有效,否则向发送端回送“校验错”的应答。 发送命令: 7E 00 A0 01 1C 6C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F9 3D 7F 应答: 7E 00 A0 00 23 6C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 23 11 27 17 00 4D F7 7F 需要注意的是RP2040上电初始化后,十六进制串口交互一直是存在的,其他的功能不能影响十六进制串口交互响应速度。 3、 10ms定时器输出GPIO时序: 做一个10ms周期的定时器,并通过两个GPIO(例如GPIO0和GPIO1)输出高低电平。 上述时间值(3.92ms/1.08ms/4.21ms/0.79ms)在代码中为参数,用户可以修改。 4、 SPI给外部专用芯片发送上电时序并加载BIN文件:上电初始化后即可支持串口的AT指令交互,然后自动从SPI FLASH中读取Data.bin文件并通过SPI接口(此SPI接口和SPI FLASH无关,而是另外一个SPI接口)将bin文件内容发送出去。 需要说明的是在发送bin文件之前要完成上电序列配置(移植代码,具体见下文描述)。 Data.bin文件内容示意如下: Data.bin大小不超过64K字节,具体的大小非固定,需要程序中自己判断。该文件存放在SPI FLASH中,RP2040读取该文件, SPI格式说明如下: 1) SPI为四线制; 2) SPI格式为: SPI的控制部分:长度为2字节(即16bits),Bit15即R/W,’1’表示写,’0’表示读。Tran Size指示数据部分的长度(’011’表示数据部分长度为4字节,即32bit,’110’表示数据部分长度为2字节,即16bit)。 SPI的数据部分:长度根据Tran Size的不同配置,为2字节或者4字节。 3) SPI的时序: 请参考并尽量沿用附件压缩包的C代码,其中主流程为User_function.c中的 主流程包括两部分: (1)、CHIP_INIT():就是完成专用芯片的上电序列寄存器配置; (2)、CHIP_CodeDownload():就是发送bin文件; 需要说明的是,在附件参考代码中的ref40M.h和binFile[]就是将bin文件变成了数组,这种方式可能比较占用程序空间,需要改为SPI FLASH中读取Data.bin文件(可以分段读取,开个小buffer)并通过SPI输出。 5、 PIO并行输入功能:上述功能完成后进入PIO的并行输入和并行输出工作状态。使用RP2040的PIO功能对14个IO进行并行采样(采用120M时钟,也就是外部输入的30M时钟做四倍频配置),并把数据缓存到内存的buffer,buffer深度为1024,采用乒乓buffer交替缓存。数据从PIO到buffer要使用DMA传输,不能占用CPU的资源。 6、 PIO并行输出功能:使用RP2040的PIO功能对14个IO进行并行输出(采用125M时钟),可以先做一个两个1024长度的数组(buffer),然后乒乓将buffer读出从14个IO并行输出。数据从buffer到PIO要使用DMA传输,不能占用CPU的资源。 7、 固件要支持16M的SPI FLASH。 验收: 1、 开发周期为一个月,最晚交付不能超过2个月,本项目的重点是PIO功能的开发。 2、 AT指令的交互通过串口助手进行验证,波特率115200,交互内容: 发送命令: AT+CGSN=1 RP2040应答: AT+CGSN=1 +CGSN:868744036640526 OK 达到上述效果即可。 3、 十六进制串口交互通过串口助手进行验证,波特率115200,交互内容: 发送命令: 7E 00 A0 01 1C 6C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F9 3D 7F RP2040应答: 7E 00 A0 00 23 6C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 02 23 11 27 17 00 4D F7 7F 4、 10ms定时器输出GPIO时序用示波器/逻辑分析仪观测RP2040的对应两个GPIO管脚输出波形。 5、 SPI的验证通过用示波器/逻辑分析仪观测RP2040的SPI管脚输出波形,并由逻辑分析仪自动完成SPI译码确认。 6、 PIO的并行输入和并行输出通过客户提供环回底板(也就是客户会提供一个PIO输出管脚到PIO输入管脚环回功能的底板),开发人员在程序中将+1递增序列从PIO并行发出去,然后从PIO并行接收回来,数据比对无误码则通过。 交付: 1、全套源代码和RP2040固件; 2、程序说明文档; 3、使用文档,包括如何从零安装RP2040的C代码开发环境,需要安装的软件提供下载链接。能够使我方人员从零建立RP2040的C代码开发环境并在树莓派官方的RP2040开发板成功运行上述代码。

项目竞标

接包方 国家/地区
通过实名认证
3
Zzrt
北京市
通过实名认证
2
Qiangzi (中标)
北京市

竞标

请您先登录,然后提交此项目的竞标方案。
还不是智城用户? 智城期待您的加入,请注册成为我们的一员吧!
Project ad2