主题中讨论的其他器件: UNIFLASH
您好!
我无法连接 到 PEAP-MSCHAPv2的 WPA2-Enterprise 网络集。
我正在使用 Network_Terminal 示例并对:cmdWlanConnectCallback()函数进行以下修改:
1) 1)添加了用于刷写根证书的代码。
2) 2)添加了用于设置时间的代码。
下面显示了对 Network_Terminal 示例的完整更改:
//******** PEM 格式的 CA 证书*****
const char TestCA[]=
"---- 开始证书-- \r\n "
"MiIDmTCCAoGAwIBAgIQVtgg1/LEcY9N46LX/IxE2DANBgqhkiG9w0BAQsFADBe\r\n"
"MRMwEQYKCZImiZPyLGQBGRYDY29tMRcwFQYKCZImiZPyLQBGRYHZG9tYWluMTES\r\n"
"MBAGCgmSJomT8ixkARkWAmdsMRowGAYDVQDExFnbC1XSU5TRVJWRVIwMS1DQTAg\r\n"
"Fw0yMTA0MDQxNzAzNTVaGA8yMDcxMDQwNDE3MTM1NVowXjETMBEGCgmSJomT8ixk\r\n"
"ARkWA2NvbTEXMBUGCgmSJomT8ixkARkWB2RvbWFPbJExEjAQBgoJkiaJk/IsZAEZ\r\n"
"FgJnbDEaMBgGA1UAxMRZ2wtV0lOU0VSVkVSMDEQ0EwggEiMA0GCSqGSIb3DQEB\r\n"
"AQUAA4IBDwAwggEKAoIBAQCxtTq1GWH77Bj+tarT7DV5NJV0xJLW3/T/uzxG5z4b\r\n"
"YSGddc0Wq7RRFQ6QcyC_pNNeKoZ65PVetnMQl35BXRLVJLYCMhCNykSOPFTJ9K4Pq\r\n"
"qvPDWnwaw8eVl/40pB+TgNZtgKXY5iJJW6cqhXew4+feB4XMnUg0ghXiyD6ffP2g\r\n"
"F9XQ5cGoZTQd9h3JAuOfGgjyhl+m+RTjfRBPfAEVxB2lWKr0oRpf0p9B48lubjru\r\n"
"++w+cc24fPSZqD+9cRR5Y81DhgoBHNEPIdke6EQePPZOB5+He5ioHKgDTqVP55J\r\n"
"4ezij2tjtgcpH63uCGDMAMl45fC7rfEZg/tpBj8StXTdAgMBAAGjUTBPMAsGA1Ud\r\n"
"DwQEAwIBhjAPBgNVHRMBAf8EBTADAPQH/MB0GA1UdDgQWBBT0VZ4XG1CexdRJsiN\r\n"
"jh5weuelHDAQBgkrBgEEAYI3FQEEAwIBADANBgqhkiG9w0BAQsFAAOCAQEAqR99\r\n"
"eKiZR8Vl7spiCHss3oIK9JfVXRmcenTHDF+OcLU1BcZr67zIyoXKRNSgwmLWiGq\r\n"
"/IBfcK4Ho0DC+sAlZAwmMqDMBDDDB60oJXVXrdvOutafaiykhcr6IV6eGGGNJdFrv\r\n"
"qifRW60bgEWerwNVWjyrgf8JRzqArfv5uNDzKWoZOozXoA+YBW9hk3P3MMM/UGZ+r\n"
"zpeBqT4/gAe2U6itp6aVt7d4pE9znpCEZBwTIrtRPu28AALaOSaTfCa/fVBTPl\r\n"
"wBV039mANSCk/Bq6zzfV8lCaQx0GK2vDAkxak6DgZN0DHNQpfLm+8ApogyJubvba\r\n"
"wykJotysAdiTLjC++w=\r\n"
"---- 结束证书-- \r\n "
;
/***** 闪存证书代码 *****
unsigned long g_tokes[4];
int16_t flashCerts (uint8_t * CertName、uint8_t * buffer、uint32_t bufflen、uint32_t maxlen、bool overwriteCerts)
{
int ret = 0;
int16_t slStatus = 0;
slfsFileInfo_t fsFileInfo;
int32_t fileHandle;
G_TOKEN[SL_FS_TOKEN_MASTER]= 0x12345678;
/*检查证书文件是否已存在*/
slStatus = sl_FsGetInfo (CertName、0、&fsFileInfo);
/*如果证书不存在,请将其写入(或在指定时覆盖)*/
如果(slStatus = sl_error_fs_file_no_exists || overwriteCerts = true)
{
fileHandle = sl_FsOpen ((unsigned char *) CertName、
SL_FS_create | SL_FS_CREATE_SECURE | SL_FS_CREATE_VENDOOR_TOKEN | SL_FS_CREATE_NOSIGNATURE
| SL_FS_CREASE_PUBLICE_READ | SL_FS_CREASE_PUBLICE_WRITE | SL_FS_OVERWRITE
| sl_FS_CREASE_MAX_SIZE (maxlen)、&(g_tokes[sl_FS_TOKEN_MASTER]);
如果(fileHandle >0)
{
RET = sl_FsWrite (fileHandle、0、(unsigned char *) buffer、bufflen);
sl_FsClose (fileHandle、NULL、0);
}
}
回程;
}
//***** 修改了 cmdWlanConnectCallback ***********
int32_t cmdlWlanConnectCallback (void *arg)
{
int32_t ret = 0;
ConnectCmd_t ConnectParams;
/*调用命令解析器*/
memset (ConnectParams、0x0、sizeof (ConnectCmd_t));
RET = ParseConnectCmd (arg、&ConnectParams);
if (ret < 0)
{
FreeConnectCmd (ConnectParams);
return(-1);
}
RET = flashCerts ("/sys/cert/ca.der、(uint8_t *) TestCA、strlen (TestCA)、2048、0);
/*
*检查 NWP 是否处于 STA 角色、
*因为它必须是 STA 角色才能连接到 AP。
*如果不是-设置角色并重置 NWP。
*
if (app_bc.role!= role_STA)
{
RET = SL_WlanSetMode (Role_STA);
ASSERT_AND_CLEAR_CONNECT (RET、WLAN_ERROR、ConnectParams);
RET = sl_Stop (sl_stop_timeout);
ASSERT_AND_CLEAR_CONNECT (RET、DEVICE_ERROR、ConnectParams);
RET = SL_Start (0、0、0);
ASSERT_AND_CLEAR_CONNECT (RET、DEVICE_ERROR、ConnectParams);
/*这里我们处于 STA 模式*/
app_b.role = ret;
}
/*根据需要设置静态 IP 配置-否则,
IP 将由网络的 DHCP 服务器分配。 *
if (ConnectParams.IP)
{
RET =
setStaticIPConfig (uint8_t*)(ConnectParams.IP)、
(uint8_t*)(ConnectParams.GW)、
(uint8_t*)(ConnectParams.DNS);
ASSERT_AND_CLEAR_CONNECT (RET、CMD_ERROR、ConnectParams);
}
/*如果需要,在连接到 ENT 网络之前设置设备时间和日期*/
if (ConnectParams.secParamsEnt.User!= NULL)
{
ConnectParams.DateTimeTM_sec = 0;
ConnectParams.DateTime.TM_min = 0;
ConnectParams.DateTimeTM_Hour = 0;
ConnectParams.DateTimeTM_Day = 7;/* 1-31 */
ConnectParams.DateTimeTM_mon = 4;/* 1-12 */
ConnectParams.DateTime.TM_year = 2021;// YYYY 4位数*/
RET =
SL_DeviceSet (SL_DEVICE_General、SL_DEVICE_General_DATE_TIME、
sizeof (slDateTim_t)、
(uint8_t *)(ConnectParams.DateTime));
ASSERT_AND_CLEAR_CONNECT (RET、DEVICE_ERROR、ConnectParams);
//连接到 ENT AP */
RET =
sl_WlanConnect ((const signed char *)(ConnectParams.SSID)、
strlen(
(const char *)(ConnectParams.SSID))、0、
和(ConnectParams.secParams)、
和(ConnectParams.secParamsEnt));
ASSERT_AND_CLEAR_CONNECT (RET、WLAN_ERROR、ConnectParams);
}
其他
{
//连接到 AP */
RET =
sl_WlanConnect ((const signed char *)(ConnectParams.SSID)、
strlen(
(const char *)(ConnectParams.SSID))、0、
ConnectParams.secParams、0);
ASSERT_AND_CLEAR_CONNECT (RET、WLAN_ERROR、ConnectParams);
}
/*等待连接事件:
*为了验证连接是否成功、
*我们在两个传入事件上挂起:已连接和已获取 IP。
*下面的信标被这个(主)上下文挂起。
*它们将在异步事件后发出信号
*表示 NWP 已连接且获取的 IP 地址被提升。
*有关详细信息,请参阅此应用程序自述文件。
*
if (!is_connected (app_b.Status))(如果!is_connected (app_bc.Status)
{
RET = SEM_WAIT_TIMEOUT (&APP_CB.CON_CB.connectEventSyncObj、
wlan_event_tout);
if (ret ==timeout_sem)
{
UART_PRINT ("\n\n\r\n[wlanconnect]:连接到 AP 的超时:%s\n\r\n、
ConnectParams.ssid);
FreeConnectCmd (ConnectParams);
return(-1);
}
}
if (!is_ip_acquired (app_cb.Status))(如果!is_ip_acquired (app_c
{
RET = SEM_WAIT_TIMEOUT (&APP_CB.CON_CB.ip4acquireEventSyncObj、
wlan_event_tout);
if (ret ==timeout_sem)
{
/*在下一步尝试获取 IPv6,
路由器/AP 可能不支持 IPv4 *
UART_PRINT (
"\n\r\n[wlanconnect]:获取 IPv4地址超时。\n\n");
}
}
if (!is_IPV6G_Acquired (app_CB.Status))
{
RET = SEM_WAIT_TIMEOUT (&APP_CB.CON_CB.ip6acquisedEventSyncObj、
wlan_event_tout);
if (ret ==timeout_sem)
{
UART_PRINT (
"\n\r\n[wlanconnect]:获取 IPv6地址超时。\n\n");
}
}
if (!is_IPV6G_Acquired (app_bc.Status)&&
!iS_IPV6L_Acquired (app_CB.Status)&&!is_IP_Acquired (app_CB.Status)
{
UART_PRINT ("\n\r\n 线:%d、错误:%d]%s\n\r\n、__LINE__、-1、
"网络错误");
}
FreeConnectCmd (ConnectParams);
返回(0);
}
我有几个问题:
1) 1)您能否就我可能会出什么问题提供指导?
2) swru455文档指出证书应采用 PEM 格式、但随后指出文件名应为/sys/cert/ca.der. DER 文件扩展名是否正确?
3) 3) 为了获取 NWP 日志、swru455第20节介绍了如何将 PIN_62配置为 UART 引脚。 对于 CC3235MODASF、引脚62是接地焊盘。 您能澄清一下吗?
谢谢。
