Аппаратный сброс
Когда линия RST правильно настроена, сбросить GA1000 или WA2000 можно в любой момент простым кодом, приведённым ниже. Обратите внимание: модуль Wi-Fi обязательно нужно сбросить в самом начале. Правильный аппаратный сброс не является необязательным!
При использовании WM2000 или WS1102 аппаратный сброс для правильной работы после завершения настройки не требуется. Это изначально беспроводные устройства, и аппаратный сброс означал бы перезагрузку всего устройства.
Если в вашей конструкции нет свободной линии ввода-вывода общего назначения (GPIO), сигнал сброса можно получить из комбинации сигналов линий CS и CLK (см. Подключение GA1000 и WA2000, схема B). Если есть выделенная линия RST, ею управляют напрямую.
Линия RST активна при низком уровне (LOW). WA2000 требует импульс сброса длительностью не менее 1 мс. GA1000 длительность импульса не важна (в пределах того, что достижимо на устройствах Tibbo). Приведённый ниже код выполняет сброс обоих модулей Wi-Fi на всех платформах.
Обратите внимание и на цикл while...wend. Он нужен для правильного сброса модуля, который уже был запущен и работал. При аппаратном сбросе GA1000 или WA2000 уходит из сети, и объект wln. замечает это за несколько миллисекунд. Ваша программа не должна снова обращаться к объекту wln., пока свойство wln.enabled не примет значение 0 - NO в ответ на аппаратный сброс. Код может дожидаться этого (как показано ниже) или полагаться на обработчик события on_wln_event(PL_WLN_EVENT_DISABLED). После срабатывания события можно заново пройти весь процесс запуска интерфейса Wi-Fi.
'----- reset Wi-Fi module -----
#If WLN_RESET_MODE
'reset is controlled by the combination of CS and CLK
io.lineset(wln.csmap,HIGH)
io.lineset(wln.clkmap,LOW)
io.lineset(wln.clkmap,HIGH)
#Else
'there is a dedicated reset line
io.num=WLN_RST
io.state=LOW
'The WA2000 requires a longer reset pulse (1ms), and the GA1000 will not mind it
'32-bit platforms offers a convenient sys.timercountms method
'Since the WA2000 only works on 32-bit platforms, let's write the code like this:
#if PLATFORM_TYPE_32
sys.timercountms=0
while sys.timercountms<1
wend
#endif
io.state=HIGH
#endif
'in case we called wln_init() after it has already been up and running
While wln.enabled=YES
Wend