嵌入式技术论坛
直播中

王树林

7年用户 1645经验值
私信 关注
[经验]

怎样通过W5500连接阿里云IOT并实现MQTT的功能呢

最近在做瑞萨RA6M4 的rt-thread项目。
项目是通过W5500连接阿里云IOT。实现MQTT的功能。因示例中使用了RW007wifi模块,是通过SPI1连接的。所以准备实现有线无线双上网。于是就准备利用SPI0与W5500通讯。
在配置SPI0时有几个地方要特别注意。
1 SPI MODE 选项要改成SPI OPERAtiON默认是Clock Synchronous Operation
2 取消spi0 的SSLA0 配置改为在Pins中设置。P205设成Output mode(Initial High)
3 Callback 回调函数改成spi0_callback
4 W5500的中断引脚选择PMODA上的P06。需要注意的是在配置IRQ11时Trigger默认为Rising 要改成Falling
以上配置完成后可以初始化W5500。但会出现spi0 write failed错误。
仔细对照SPI1的设置都没有问题。
后来经过分析发现在RT-THREAD setting中SPI选项中没有选择DTC,但SPI0中默认的是Enable Support for using TDC--- Enabled。
把这个选项改成Disabled驱动成功。
同样在SPI1中设置成Enabled 是没有问题的。这点一定要注意!!!
至此W5500已经可以正常联网。但在连接阿里云的IOT会出现hard fault on thread: tshell和bus fault:错误报警。
经查找定位到wizchip_dns.c中int16_t dns_makequery(uint16_t op, char * name, uint8_t * buf, uint16_t len)
函数,监控分析后发现char sname[MAXCNAME];变量数值太小。
阿里云iot网址要5-60个字符。造成cp错误error:Cannot access memory at address xxxxxxx
更改wizchip_dns.h中的为#define MAX_DOMAIN_NAME 256原来是16对于太长的网址会造成内存地址错误。
在此特做记录。

原作者:plcpro

更多回帖

发帖
×
20
完善资料,
赚取积分