
Previously recommended excellent open source projects on GitHub, “What are the excellent VHDL/Verilog/FPGA projects on GitHub“. OpenWIFI, as a leader in the communication field, many people will naturally take it for learning. This article will share with you how to build a low-cost OpenWIFI using ZYNQ (requires ZYNQ010 or higher chip) + AD936X.
openwifi: A full-stack IEEE802.11/Wi-Fi design compatible with Linux mac80211 based on SDR (Software Defined Radio).
The hardware used is as follows:
1. ZYNQ7020 + AD9364, Analog Devices AD9364- BBCZ integrated 1×1 RF Agile Transceiver™ + Xilinx Zynq XC7Z020-1CLG400I AP SoC (for digital processing)
2. Introduction of 7020:https://china.xilinx.com/support/documentation/boards_and_kits/zc702_zvik/ug850-zc702-eval-bd.pdf
3. AD9364: See the Chinese manual for details.
Some ZYNQ + AD936x solutions are basically variations of the official ADI AD-FMCOMMS [2,3,4,5] –EBZ (details see Note 2), all design materials can be directly used with the official project. At the same time, the official has also made u-boot, kernel, and file systems for some commonly used development boards and open-source hardware, and you only need to prepare an SD/FT card and a card reader during use;
|
|
Simultaneous Transmit/Receive
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Highly Integrated Module System
|
|
|
|
|
|
|
Highly Integrated Module System
|
|
|
|
|
|
|
Best RF Performance in Narrow Range
|
|
|
|
|
|
|
Software Testing and Waveform Development
|
|
|
|
|
1 (2400-2500 MHz) 1 (70-6000 MHz)
|
1 (2400-2500 MHz) 1 (70-6000 MHz)
|
|
|
|
|
4 (2400-2500 MHz) 4 (70-6000 MHz)
|
4 (2400-2500 MHz) 4 (70-6000 MHz)
|
MIMO Test Platform, Can Synchronize in RF Domain
|
|
The official supported board is as follows:
|
|
|
Xilinx ZC706 dev board + FMCOMMS2/3/4
|
|
Xilinx zed board + FMCOMMS2/3/4
|
|
ADRV9364-Z7020 + ADRV1CRR-BOB
|
|
ADRV9361-Z7035 + ADRV1CRR-BOB/FMC
|
|
Xilinx ZC702 dev board + FMCOMMS2/3/4
|
|
Xilinx ZCU102 dev board + FMCOMMS2/3/4
|
|
Xilinx ZCU102 dev board + ADRV9371
|
1. Download the SD card image
The image contains U-boot, kernel, and file system.
https://users.ugent.be/~xjiao/openwifi-1.2.0-leuven-2-32bit.img.xz
After downloading, it will be a .xz file
On Windows, you need to unzip it first, and the extracted file is the .img file we need.
Next, prepare an SD/TF card with more than 8GB of memory and connect it to the computer through a card reader.
Prepare an SD card burning software. I usually use Win32DiskImager. Open the software, select the downloaded img file, and set it as follows:
Step 1: Select the downloaded img file;
Step 2: Select the corresponding drive letter of the SD/TF card, be sure to check carefully to prevent damaging other cards;
Step 3: Click WRITE to write the file to the card;
Step 4: Wait for completion.
2. Copy files to the corresponding location
The burned card can only display the boot partition on Windows, first check what files are in the partition:
The u-boot and device tree provided by ADI for each board are located in the corresponding folder:
The SD card also includes the kernel + u-boot environment variables
Where uImage (kernel) is in the folder shown in the image below and also needs to be copied to the root directory of the SD card, after copying, as shown in the image above.
The file system needs to be viewed in the Linux system (WINDOWS does not support), as follows:
Finally, in the boot partition mentioned above, copy the u-boot and device tree to the root partition of the SD card,
Open the path shown in the image below:
Copy the internal files to the root directory of the SD card:
Note to replace the original files, then you can modify the environment variable text as needed (default not needed), connect the platform’s serial port + power on to see the complete system print information, the serial port settings are as follows:
So far, the process of building the platform using AD936X + ZYNQ with the official image has been completed, and you can have fun now.
To summarize: 1. Download the image file; 2. Copy the corresponding u-boot, device tree, and kernel (uImage) from the OpenWIFI folder to the root directory of the SD card (BOOT).
Hardware:SDR Hardware Platform
Development Platform: Windows
Attachment: WIFI Antenna*2
Note: The antenna interface must choose the corresponding socket interface for your SDR platform, the common one is SMA interface. Other interfaces need to find a way to connect the antenna to the RX and TX interfaces of the SDR.
After OpenWIFI starts, there is a fixed IP. You need to connect the platform to the WLAN interface of the router. If the IP segment of OpenWIFI is not in the same frequency segment as the router, you need to modify the IP of OpenWIFI or the fixed IP of the router, modify it as convenient, I directly modified the router IP as shown in the image below:
Input the command in the interface shown above:
~/openwifi/fosdem-11ag.sh
OpenWIFI has started, at this time use your phone to connect to Openwifi’s wifi;
Open the browser on your phone and go to192.168.13.1 webpage to see the author’s homepage, detailed video see the link below.
The current settings still cannot access the internet, you need to bridge OpenWIFI and the WLAN of the router, mainly using three commands:
sudo sysctl -w net.ipv4.ip_forward=1sudo iptables -t nat -A POSTROUTING -o NICY -j MASQUERADEsudo ip route add 192.168.13.0/24 via 192.168.10.122 dev ethX
The red part is what needs to be changed, the specific meaning will not be explained (mainly related to the routing table issue), just look at the board-end IP used above and you will understand.
The actual modified command is as follows:
sudo sysctl -w net.ipv4.ip_forward=1sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEsudo ip route add 192.168.13.0/24 via 192.168.10.122 dev eth0
Modify the configuration in the serial port.
At this point, connecting to Open WIFI’s wifi with your phone can access the internet, as shown below:
The signal reception part is weak because the antenna is not plugged in.
– END –

NOW take action!<br/><br/><br/>Recommended Reading<br/><br/>【Vivado those things】How to find official examples and how to use official examples<br/>【Vivado Usage Pitfalls and Advanced】Summary<br/>【Vivado those things】Vivado header file usage precautions<br/>【Vivado those things】Common shortcuts in Vivado (1) F4 key<br/>【Vivado those things】Common shortcuts in Vivado (2) Other common shortcuts<br/><br/>SystemVerilog Digital System Design_ Xia Yuwen PDF<br/>Difference between always, assign and always@(*) in Verilog<br/><br/>How to find the maximum and second maximum of 32 inputs on FPGA: Divide and Conquer<br/>Book Recommendation| ARM Cortex-M0 Fully Programmable SoC Principles and Implementation<br/><br/>How to learn FPGA<br/>RISC-V Further! The world's first 5nm RISC-V SOC successfully taped out!<br/><br/>Several open-source SDR platforms<br/><br/>Xilinx launches Kria adaptive system module product portfolio, accelerating innovation and AI applications at the edge<br/><br/>Introduction to RISC-V instruction set architecture and introduction to domestic and foreign manufacturers<br/><br/>Vitis tasting (1)<br/><br/>Basic principles of LNA and PA in SDR/wireless design<br/><br/>Disassembling the 1968 US military computer, really doubting it's a "time travel"!<br/><br/>A comprehensive popular science article on FPGA technology<br/><br/>The first Chinese CPU instruction specification, Loongson launched the LoongArch infrastructure manual<br/><br/>Have you ever seen a 1-bit CPU?<br/><br/>Advanced FPGA design techniques! Multi-clock domain and asynchronous signal processing solutions<br/><br/>【Vivado those things】Netlist description of circuit structure in Vivado<br/><br/>What is the difference between bare-metal development and Linux development in ZYNQ?<br/><br/>The prototype of modern computers - the microcomputer MCS-4<br/><br/>Is the world's first microprocessor really the Intel 4004? In fact, this is a complex story...<br/><br/>【Weekly Question】How to control the output high and low level of FPGA IO pins when loading FPGA programs<br/><br/>【Vivado those things】Error when generating .bit file in vivado - ERROR: [Drc 23-20]<br/><br/>AD9361 and Zynq and their reference design instructions<br/>Have you been using a virtual machine for 1202 years? Detailed tutorial on installing Ubuntu subsystem and graphical interface on Win10<br/><br/>Talk about the implementation process of Xilinx FPGA design<br/><br/>Excellent VHDL/Verilog/FPGA projects on GitHub<br/><br/>Building a radio with AD936x+ZYNQ (1)<br/><br/>Building a radio with AD936x+ZYNQ (2) including video demonstration<br/><br/><br/><br/>Click on the above font to jump to read