3个版本
0.1.2 | 2020年10月12日 |
---|---|
0.1.1 | 2020年10月12日 |
0.1.0 | 2020年10月12日 |
#81 in #spi
37KB
992 代码行(不包括注释)
drogue-es-wifi
用于Inventek eS-WiFi SPI WiFi卸载板的驱动程序。
使用方法
eS-WiFi板通过SPI外设接口,加上一些额外的引脚
- SPI
- SCK
- CIPO
- COPI
- 芯片选择
- 就绪
- 唤醒
- 复位
引脚
根据您的特定芯片组适当地收集和配置SPI和非SPI引脚
let sck = gpioc.pc10.into_af6(&mut gpioc.moder, &mut gpioc.afrh);
let cipo = gpioc.pc11.into_af6(&mut gpioc.moder, &mut gpioc.afrh);
let copi = gpioc.pc12.into_af6(&mut gpioc.moder, &mut gpioc.afrh);
let mut cs = gpioe.pe0.into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
let mut ready = gpioe.pe1.into_pull_up_input(&mut gpioe.moder, &mut gpioe.pupdr);
let mut reset = gpioe.pe8.into_push_pull_output(&mut gpioe.moder, &mut gpioe.otyper);
let mut wakeup = gpiob.pb13.into_push_pull_output(&mut gpiob.moder, &mut gpiob.otyper);
let mut spi = Spi::spi3(
device.SPI3,
(sck, cipo, copi),
MODE,
20.mhz(),
clocks,
&mut rcc.apb1r1,
);
时钟
需要嵌入式时间
Clock
以提供适当的延迟和超时。 drogue-embedded-timer crate提供管理时钟的实用程序和说明。
初始化
初始化SPI外设、额外引脚和时钟后,您可以初始化WiFi适配器
let wifi = drogue_es_wifi::adapter::Adapter::new(
spi,
cs,
ready,
wakeup,
reset,
&CLOCK,
).unwrap();
加入接入点
在使用适配器之前,&CLOCK
必须正在运行。
要加入WEP加密的接入点
let response = wifi.join_wep("drogue", "rodneygnome");
TCP连接
适配器直接实现了drogue-network
TcpStack
let remote = HostSocketAddr::new(
HostAddr::new(IpAddr::from_str("192.168.1.245").unwrap(), Option::None),
80,
);
let mut socket = wifi.open(drogue_network::tcp::Mode::Blocking).unwrap();
let mut socket = wifi.connect(socket, remote).unwrap();
let len = wifi.write(&mut socket, b"GET / HTTP/1.1\r\nhost:192.168.1.245\r\n\r\n").unwrap();
loop {
let mut buffer: [u8; 1024] = [0; 1024];
let result = wifi.read(&mut socket, &mut buffer);
match result {
Ok(len) => {
let s = core::str::from_utf8(&buffer[0..len]).unwrap();
log::info!( "{}", s);
}
Err(e) => {
match e {
Error::Other(e) => {
log::error!("error {:?}", e);
break;
}
Error::WouldBlock => {
}
}
}
}
}
wifi.close(socket).unwrap();
依赖项
~3MB
~56K SLoC