From f71252c5371788718274ed9b8271c9301e556263 Mon Sep 17 00:00:00 2001 From: Xianjun Jiao Date: Mon, 19 Oct 2020 10:13:51 +0200 Subject: [PATCH] iq capture feature --- README.md | 3 +- doc/README.md | 2 +- doc/app_notes/csi.md | 13 +- doc/app_notes/iq-architecture.jpg | Bin 0 -> 128731 bytes doc/app_notes/iq-capture-parameter.jpg | Bin 0 -> 39942 bytes doc/app_notes/iq-information-format.jpg | Bin 0 -> 22803 bytes doc/app_notes/iq.md | 139 ++++++++++++++++++ driver/side_ch/side_ch.c | 90 ++++++++++-- driver/side_ch/side_ch.h | 9 +- kernel_boot/boards/zed_fmcs2/devicetree.dtb | Bin 21279 -> 20127 bytes kernel_boot/boards/zed_fmcs2/devicetree.dts | 6 +- user_space/side_ch_ctl_src/iq_capture.py | 122 +++++++++++++++ user_space/side_ch_ctl_src/side_ch_ctl.c | 30 ++-- .../side_ch_ctl_src/side_info_display.py | 3 +- .../side_ch_ctl_src/test_iq_file_display.m | 47 ++++++ .../test_side_info_file_display.m | 5 +- 16 files changed, 430 insertions(+), 39 deletions(-) create mode 100644 doc/app_notes/iq-architecture.jpg create mode 100644 doc/app_notes/iq-capture-parameter.jpg create mode 100644 doc/app_notes/iq-information-format.jpg create mode 100644 doc/app_notes/iq.md create mode 100755 user_space/side_ch_ctl_src/iq_capture.py create mode 100644 user_space/side_ch_ctl_src/test_iq_file_display.m diff --git a/README.md b/README.md index 86c5939..68a3c9c 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ Openwifi code has dual licenses. AGPLv3 is the opensource license. For non-opens - Easy to change bandwidth and frequency: - 2MHz for 802.11ah in sub-GHz - 10MHz for 802.11p/vehicle in 5.9GHz -- CSI (Channel State Information, also freq offset, equalizer) [[CSI notes](doc/app_notes/csi.md)] +- CSI (Channel State Information, freq offset, equalizer to computer) [[CSI notes](doc/app_notes/csi.md)] +- IQ capture (real-time AGC, RSSI, IQ sample to computer) [[IQ notes](doc/app_notes/iq.md)] - On roadmap: **802.11ax** **Performance (AP: openwifi at channel 44, client: TL-WDN4200 N900 USB Dongle):** diff --git a/doc/README.md b/doc/README.md index 57bd4a6..a50504c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -149,7 +149,7 @@ After FPGA receives a packet, no matter the FCS/CRC is correct or not it will ra - frame filtering -The FPGA frame filtering configuration is done in real-time by function openwifi_configure_filter() in sdr.c. This is needed by [mac80211 frame filtering](https://www.kernel.org/doc/html/v4.9/80211/mac80211.html#frame-filtering). The filter_flag together with **HIGH_PRIORITY_DISCARD_FLAG** finally go to pkt_filter_ctl.v of xpu module in FPGA, and control how FPGA does frame filtering. Openwifi has the capability to capture all received packets even if the CRC is bad. You just need to set the NIC to monitor mode by iwconfig command (check monitor_ch.sh in user_space directory). In monitor mode, openwifi_configure_filter() will set **MONITOR_ALL** to the frame filtering module pkt_filter_ctl.v in FPGA. This makes sure transfer all received packets to Linux mac80211 via rx interrupt. +The FPGA frame filtering configuration is done in real-time by function openwifi_configure_filter() in sdr.c. The filter_flag together with **HIGH_PRIORITY_DISCARD_FLAG** finally go to pkt_filter_ctl.v of xpu module in FPGA, and control how FPGA does frame filtering. Openwifi has the capability to capture all received packets even if the CRC is bad. You just need to set the NIC to monitor mode by iwconfig command (check monitor_ch.sh in user_space directory). In monitor mode, openwifi_configure_filter() will set **MONITOR_ALL** to the frame filtering module pkt_filter_ctl.v in FPGA. This makes sure transfer all received packets to Linux mac80211 via rx interrupt. - main rx interrupt operations in openwifi_rx_interrupt() - get raw content from DMA buffer. When Linux receives interrupt from FPGA rx_intf module, the content has been ready in Linux DMA buffer diff --git a/doc/app_notes/csi.md b/doc/app_notes/csi.md index ab12021..187ed53 100644 --- a/doc/app_notes/csi.md +++ b/doc/app_notes/csi.md @@ -90,7 +90,7 @@ We extend the **CSI** (Channel State Information) to **CSI** (Chip State Informa ``` side_ch_ctl gN ``` - The interval will become N*100ms + The interval will become N*1ms ## Config the num_eq The num_eq (number of equalizer output) is configurable in case you don't need so many equalizer informations. The valid value is 0~8. You should align the num_eq value at the side_ch.ko, side_info_display.py and test_side_info_file_display.m. @@ -105,6 +105,17 @@ We extend the **CSI** (Channel State Information) to **CSI** (Chip State Informa ``` - When use the Matlab script, please change the num_eq variable in the script to 3 (3 is just an example). +## Compile the side channel driver and user space program + - side_ch.ko + ``` + $OPENWIFI_DIR/driver/side_ch/make_driver.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT +(For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64) + ``` + - side_ch_ctl (take user_space/side_ch_ctl_src/side_ch_ctl.c and compile it on board!) + ``` + gcc -o side_ch_ctl side_ch_ctl.c + ``` + ## Run the CSI together with modes other than monitor The openwifi CSI feature could run with not only monitor mode but also other modes, such as AP-Client or ad-hoc mode. After the communication functionality is fully up in those modes, you can start CSI feature from "**insmod side_ch.ko**" and "**./side_ch_ctl g**" on board as described in the previous sections to extract CSI to your computer. diff --git a/doc/app_notes/iq-architecture.jpg b/doc/app_notes/iq-architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4711fa408ba6cbe50c89132f026d720c98baea59 GIT binary patch literal 128731 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

qgupW1cZBS2D%!LdJjg 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 literal 0 HcmV?d00001 diff --git a/doc/app_notes/iq-information-format.jpg b/doc/app_notes/iq-information-format.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0ccb64fa48e8951c99c408c44a612e8f8f7ffbb GIT binary patch literal 22803 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 MaJx-E@b8I#0dCZEQ~&?~ literal 0 HcmV?d00001 diff --git a/doc/app_notes/iq.md b/doc/app_notes/iq.md new file mode 100644 index 0000000..6797f56 --- /dev/null +++ b/doc/app_notes/iq.md @@ -0,0 +1,139 @@ +We implement the **IQ sample capture** with interesting extensions: many **trigger conditions**; **RSSI**, RF chip **AGC** **status (lock/unlock)** and **gain**. + +## Quick start +- Power on the SDR board. +- Connect a computer to the SDR board via Ethernet cable. The computer should have static IP 192.168.10.1. Open a terminal on the computer, and then in the terminal: + ``` + ssh root@192.168.10.122 + (password: openwifi) + cd openwifi + ./wgd.sh + (Wait for the script completed) + ./monitor_ch.sh sdr0 11 + (Monitor on channel 11. You can change 11 to other channel that is busy) + insmod side_ch.ko iq_len_init=8187 + (for zed, adrv9364z7020, zc702 board, 8187 should be 4095 because they have smaller FPGA) + + ./side_ch_ctl wh11d4094 + (Above command is needed only when you run with zed, adrv9364z7020, zc702 board) + + ./side_ch_ctl g + ``` + You should see on board outputs like: + ``` + loop 64 side info count 61 + loop 128 side info count 99 + ... + ``` + If the second number (61, 99, ...) is not zero and keeps increasing, that means the IQ sample is going to the computer smoothly. + +- Open another terminal on the computer, and run: + ``` + cd openwifi/user_space/side_ch_ctl_src + python3 iq_capture.py + (for zed, adrv9364z7020, zc702 board, add 4095 as parameter!) + ``` + The python script needs "matplotlib.pyplot" and "numpy" packages installed. Now you should see 3 figures showing run-time **IQ sample**, **AGC gain and lock status** and **RSSI (uncalibrated)**. Meanwhile the python script prints the **timestamp**. + + While running, all informations are also stored into a file **iq.txt**. A matlab script **test_iq_file_display.m** is offered to help you do analysis on the IQ Information offline. For zed, adrv9364z7020, zc702 board, do not forget to change the **iq_len** in the matlab script to 4095. + +## Understand the IQ capture feature + The IQ information is extracted via the openwifi **side channel** infrastructure. This figure explains the related modules (also related source code file name) and how the information goes from the SDR board to the computer. + ![](./iq-architecture.jpg) + + The IQ information format is shown in this figure. + ![](./iq-information-format.jpg) + + For each element, the actual size is 64bit. + - timestamp: 64bit TSF timer value when the capture is triggered. + - IQ + - The first two 16bit are used for I/Q sample + - The 3rd 16bit is AD9361 AGC gain (bit7 -- lock/unlock; bit6~0 -- gain value) + - The 4th 16bit is RSSI (half dB, uncalibrated). Please check xpu.v and sdr.c to understand how the raw RSSI value is finally calibrated and reported to Linux mac80211. + + The python and Matlab scripts are recommended for you to understand the IQ packet format precisely. + +## Config the IQ capture and interval + The quick start guide capture a period of history IQ when the packet FCS checksum is checked by Wifi receiver (no matter pass or fail). To initiate the capture with different trigger condition and length, configuration command should be issued before executing "**side_ch_ctl g**". The configuration command is realized by feeding a different parameter to "**side_ch_ctl**". The main parameters that are configurable are explained in this figure. + ![](./iq-capture-parameter.jpg) + + **iq_len** is the number of IQ samples captured per trigger condition met. The capture is started from the time **pre_trigger_len** IQ samples before the trigger moment. **iq_len** is set only one time when you insert the side_ch.ko. Please check the next section for **iq_len** configuration. This section introduces the setting of pre_trigger_len and trigger condition. + - pre_trigger_len + ``` + ./side_ch_ctl wh11dY + ``` + The parameter **Y** specifies the pre_trigger_len. Valid range 0 ~ 8190. It is limited by the FPGA fifo size. For **small FPGA** (zed_fmcs2, adrv9364z7020, zc702), valid range is 0 ~ **4094**. + - trigger condition + ``` + ./side_ch_ctl wh8dY + ``` + The parameter **Y** specifies the trigger condition. Valid range 0 ~ 15, which is explained in this table. + + value|meaning + -----|------- + 0 |receiver gives FCS checksum result. no matter pass/fail + 1 |receiver gives FCS checksum result. pass + 2 |receiver gives FCS checksum result. fail + 3 |receiver gives SIGNAL field checksum result. no matter pass/fail + 4 |receiver gives SIGNAL field checksum result. pass + 5 |receiver gives SIGNAL field checksum result. fail + 6 |receiver gives SIGNAL field checksum result. no matter pass/fail. HT packet + 7 |receiver gives SIGNAL field checksum result. no matter pass/fail. non-HT packet + 8 |receiver gives long preamble detected + 9 |receiver gives short preamble detected + 10|RSSI (half dB uncalibrated) goes above the threshold + 11|RSSI (half dB uncalibrated) goes below the threshold + 12|AD9361 AGC from lock to unlock + 13|AD9361 AGC from unlock to lock + 14|AD9361 AGC gain goes above the threshold + 15|AD9361 AGC gain goes below the threshold + + To set the RSSI threshold + ``` + ./side_ch_ctl wh9dY + ``` + The parameter **Y** specifies the RSSI threshold. Valid range 0 ~ 2047. + + To set the AGC gain threshold + ``` + ./side_ch_ctl wh10dY + ``` + The parameter **Y** specifies the AGC gain threshold. Valid range 0 ~ 127. + + The command "**side_ch_ctl g**" will perform IQ capture every 100ms until you press ctrl+C. To use a different capture interval: + ``` + side_ch_ctl gN + ``` + The interval will become N*1ms + +## Config the iq_len + The **iq_len** (number of IQ sample per capture) is configurable in case you want less IQ samples per capture so that it can be triggered more times during a specific analysis period. The valid value is 1~**8187**. For **small FPGA** (zed_fmcs2, adrv9364z7020, zc702), valid range is 0 ~ **4095**. It is independant form pre_trigger_len, and it can be less than pre_trigger_len if you want. You should align the **iq_len** value at the side_ch.ko, iq_capture.py and test_iq_file_display.m. + - When insert the kernel module, use: + ``` + insmod side_ch.ko iq_len_init=3000 + ``` + Here 3000 is an example. **ATTENTION:** You need to specify **iq_len_init** explicitly to turn on IQ capture, which will turn off CSI. Insert the side_ch.ko without any parameter will run CSI mode. + - When launch the python script, use: + ``` + python3 iq_capture.py 3000 + ``` + - When use the matlab script, please change the **iq_len** variable in the script to 3000. + +## Compile the side channel driver and user space program + - side_ch.ko + ``` + $OPENWIFI_DIR/driver/side_ch/make_driver.sh $OPENWIFI_DIR $XILINX_DIR ARCH_BIT +(For Zynq 7000, ARCH_BIT should be 32, for Zynq MPSoC, ARCH_BIT should be 64) + ``` + - side_ch_ctl (take user_space/side_ch_ctl_src/side_ch_ctl.c and compile it on board!) + ``` + gcc -o side_ch_ctl side_ch_ctl.c + ``` + +## Run the IQ capture together with modes other than monitor + The openwifi IQ capture feature could run with not only monitor mode but also other modes, such as AP-Client or ad-hoc mode. After the communication functionality is fully up in those modes, you can start IQ capture from "**insmod side_ch.ko**" and "**./side_ch_ctl g**" on board as described in the previous sections to extract IQ information to your computer. + +## Map the IQ information to the WiFi packet + If you want to relate the IQ information to the WiFi packet, you need to capture WiFi packets (tcpdump/wireshark/etc) while capturing IQ. Then you can relate the timestamp between WiFi packet and IQ information. Please be noticed that the timestamp in the IQ information is the moment when capture is triggered, which could be different from the timestamp reported in the packet capture program. But since they share the same time base (TSF timer), you can relate them easily by analyzing the WiFi packet and IQ sample sequence. + + Please learn the python and Matlab script to extract IQ information per capture according to your requirement. diff --git a/driver/side_ch/side_ch.c b/driver/side_ch/side_ch.c index 751b481..0fb0d2a 100644 --- a/driver/side_ch/side_ch.c +++ b/driver/side_ch/side_ch.c @@ -28,10 +28,14 @@ #include "side_ch.h" static int num_eq_init = 8; // should be 0~8 +static int iq_len_init = 0; //if iq_len>0, iq capture enabled, csi disabled module_param(num_eq_init, int, 0); MODULE_PARM_DESC(num_eq_init, "num_eq_init. 0~8. number of equalizer output (52 each) appended to CSI"); +module_param(iq_len_init, int, 0); +MODULE_PARM_DESC(iq_len_init, "iq_len_init. if iq_len_init>0, iq capture enabled, csi disabled"); + static void __iomem *base_addr; // to store driver specific base address needed for mmu to translate virtual address to physical address in our FPGA design struct dma_chan *chan_to_pl = NULL; @@ -71,12 +75,12 @@ static inline void SIDE_CH_REG_NUM_DMA_SYMBOL_write(u32 value){ reg_write(SIDE_CH_REG_NUM_DMA_SYMBOL_ADDR, value); } -static inline u32 SIDE_CH_REG_START_DMA_TO_PS_read(void){ - return reg_read(SIDE_CH_REG_START_DMA_TO_PS_ADDR); +static inline u32 SIDE_CH_REG_IQ_CAPTURE_read(void){ + return reg_read(SIDE_CH_REG_IQ_CAPTURE_ADDR); } -static inline void SIDE_CH_REG_START_DMA_TO_PS_write(u32 value){ - reg_write(SIDE_CH_REG_START_DMA_TO_PS_ADDR, value); +static inline void SIDE_CH_REG_IQ_CAPTURE_write(u32 value){ + reg_write(SIDE_CH_REG_IQ_CAPTURE_ADDR, value); } static inline u32 SIDE_CH_REG_NUM_EQ_read(void){ @@ -111,6 +115,46 @@ static inline void SIDE_CH_REG_ADDR2_TARGET_write(u32 value){ reg_write(SIDE_CH_REG_ADDR2_TARGET_ADDR, value); } +static inline u32 SIDE_CH_REG_IQ_TRIGGER_read(void){ + return reg_read(SIDE_CH_REG_IQ_TRIGGER_ADDR); +} + +static inline void SIDE_CH_REG_IQ_TRIGGER_write(u32 value){ + reg_write(SIDE_CH_REG_IQ_TRIGGER_ADDR, value); +} + +static inline u32 SIDE_CH_REG_RSSI_TH_read(void){ + return reg_read(SIDE_CH_REG_RSSI_TH_ADDR); +} + +static inline void SIDE_CH_REG_RSSI_TH_write(u32 value){ + reg_write(SIDE_CH_REG_RSSI_TH_ADDR, value); +} + +static inline u32 SIDE_CH_REG_GAIN_TH_read(void){ + return reg_read(SIDE_CH_REG_GAIN_TH_ADDR); +} + +static inline void SIDE_CH_REG_GAIN_TH_write(u32 value){ + reg_write(SIDE_CH_REG_GAIN_TH_ADDR, value); +} + +static inline u32 SIDE_CH_REG_PRE_TRIGGER_LEN_read(void){ + return reg_read(SIDE_CH_REG_PRE_TRIGGER_LEN_ADDR); +} + +static inline void SIDE_CH_REG_PRE_TRIGGER_LEN_write(u32 value){ + reg_write(SIDE_CH_REG_PRE_TRIGGER_LEN_ADDR, value); +} + +static inline u32 SIDE_CH_REG_IQ_LEN_read(void){ + return reg_read(SIDE_CH_REG_IQ_LEN_ADDR); +} + +static inline void SIDE_CH_REG_IQ_LEN_write(u32 value){ + reg_write(SIDE_CH_REG_IQ_LEN_ADDR, value); +} + static inline u32 SIDE_CH_REG_M_AXIS_DATA_COUNT_read(void){ return reg_read(SIDE_CH_REG_M_AXIS_DATA_COUNT_ADDR); } @@ -298,7 +342,7 @@ static int init_side_channel(void) { return(0); } -static int get_side_info(int num_eq) { +static int get_side_info(int num_eq, int iq_len) { // int err = 0;//, i; struct scatterlist chan_to_ps_sg[1]; enum dma_status status; @@ -323,7 +367,10 @@ static int get_side_info(int num_eq) { set_user_nice(current, 10); - num_dma_symbol_per_trans = HEADER_LEN + CSI_LEN + num_eq*EQUALIZER_LEN; + if (iq_len>0) + num_dma_symbol_per_trans = 1+iq_len; + else + num_dma_symbol_per_trans = HEADER_LEN + CSI_LEN + num_eq*EQUALIZER_LEN; //set number of dma symbols expected to ps num_dma_symbol = SIDE_CH_REG_M_AXIS_DATA_COUNT_read(); printk("%s get_side_info m axis data count %d per trans %d\n", side_ch_compatible_str, num_dma_symbol, num_dma_symbol_per_trans); @@ -420,8 +467,8 @@ static void side_ch_nl_recv_msg(struct sk_buff *skb) { pid = nlh->nlmsg_pid; /*pid of sending process */ if (action_flag==ACTION_SIDE_INFO_GET) { - res = get_side_info(num_eq_init); - printk(KERN_INFO "%s recv msg: get_side_info(%d) res %d\n", side_ch_compatible_str, num_eq_init, res); + res = get_side_info(num_eq_init, iq_len_init); + printk(KERN_INFO "%s recv msg: get_side_info(%d,%d) res %d\n", side_ch_compatible_str, num_eq_init, iq_len_init, res); if (res>0) { msg_size = res; // printk("%s recv msg: %d %d %d %d %d %d %d %d\n", side_ch_compatible_str, msg[0], msg[1], msg[2], msg[3], msg[4], msg[5], msg[6], msg[7]); @@ -513,6 +560,28 @@ static int dev_probe(struct platform_device *pdev) { } //-----------------initialize fpga---------------- + printk("%s dev_probe: num_eq_init %d iq_len_init %d\n",side_ch_compatible_str, num_eq_init, iq_len_init); + + // disable potential any action from side channel + SIDE_CH_REG_MULTI_RST_write(4); + // SIDE_CH_REG_CONFIG_write(0X6001); // match addr1 and addr2; bit12 FC; bit13 addr1; bit14 addr2 + SIDE_CH_REG_CONFIG_write(0x7001); // the most strict condition to prevent side channel action + SIDE_CH_REG_IQ_TRIGGER_write(10); // set iq trigger to rssi, which will never happen when rssi_th is 0 + SIDE_CH_REG_NUM_EQ_write(num_eq_init); // capture CSI + 8*equalizer by default + if (iq_len_init>0) {//initialize the side channel into iq capture mode + //Max UDP 65507 bytes; (65507/8)-1 = 8187 + if (iq_len_init>8187) { + iq_len_init = 8187; + printk("%s dev_probe: limit iq_len_init to 8187!\n",side_ch_compatible_str); + } + SIDE_CH_REG_IQ_CAPTURE_write(1); + SIDE_CH_REG_PRE_TRIGGER_LEN_write(8190); + SIDE_CH_REG_IQ_LEN_write(iq_len_init); + SIDE_CH_REG_IQ_TRIGGER_write(0); // trigger is set to fcs ok/nok (both) + } + + SIDE_CH_REG_CONFIG_write(0x0001); // allow all packets by default; bit12 FC; bit13 addr1; bit14 addr2 + //rst for (i=0;i<8;i++) SIDE_CH_REG_MULTI_RST_write(0); @@ -543,11 +612,6 @@ static int dev_probe(struct platform_device *pdev) { err = init_side_channel(); printk("%s dev_probe: init_side_channel() err %d\n",side_ch_compatible_str, err); - printk("%s dev_probe: num_eq_init %d\n",side_ch_compatible_str, num_eq_init); - // SIDE_CH_REG_CONFIG_write(0X6001); // match addr1 and addr2; bit12 FC; bit13 addr1; bit14 addr2 - SIDE_CH_REG_CONFIG_write(0x0001); // match all packets by default; bit12 FC; bit13 addr1; bit14 addr2 - SIDE_CH_REG_NUM_EQ_write(num_eq_init); // capture CSI + 8*equalizer by default - return(err); // err = dma_loopback_test(7, 512); diff --git a/driver/side_ch/side_ch.h b/driver/side_ch/side_ch.h index 7e40272..7d19960 100644 --- a/driver/side_ch/side_ch.h +++ b/driver/side_ch/side_ch.h @@ -8,15 +8,20 @@ const char *side_ch_compatible_str = "sdr,side_ch"; #define EQUALIZER_LEN (56-4) // for non HT, four {32767,32767} will be padded to achieve 52 (non HT should have 48) #define HEADER_LEN 2 //timestamp and frequency offset -#define MAX_NUM_DMA_SYMBOL 4096 //align with side_ch.v side_ch.h +#define MAX_NUM_DMA_SYMBOL 8192 //align with side_ch.v side_ch.h #define SIDE_CH_REG_MULTI_RST_ADDR (0*4) #define SIDE_CH_REG_CONFIG_ADDR (1*4) #define SIDE_CH_REG_NUM_DMA_SYMBOL_ADDR (2*4) //low 16bit to PS; high 16bit to PL -#define SIDE_CH_REG_START_DMA_TO_PS_ADDR (3*4) +#define SIDE_CH_REG_IQ_CAPTURE_ADDR (3*4) #define SIDE_CH_REG_NUM_EQ_ADDR (4*4) #define SIDE_CH_REG_FC_TARGET_ADDR (5*4) #define SIDE_CH_REG_ADDR1_TARGET_ADDR (6*4) #define SIDE_CH_REG_ADDR2_TARGET_ADDR (7*4) +#define SIDE_CH_REG_IQ_TRIGGER_ADDR (8*4) +#define SIDE_CH_REG_RSSI_TH_ADDR (9*4) +#define SIDE_CH_REG_GAIN_TH_ADDR (10*4) +#define SIDE_CH_REG_PRE_TRIGGER_LEN_ADDR (11*4) +#define SIDE_CH_REG_IQ_LEN_ADDR (12*4) #define SIDE_CH_REG_M_AXIS_DATA_COUNT_ADDR (20*4) diff --git a/kernel_boot/boards/zed_fmcs2/devicetree.dtb b/kernel_boot/boards/zed_fmcs2/devicetree.dtb index 158f62ee3d312016ccd55b445564ddd125f7d7a0..e05851aa88f586d3b04475922d306e7a2c81df6f 100644 GIT binary patch delta 547 zcmbQgjB);4MvV)+|K2h%_|0cvV6b3du*(6`8bB-v!~#GJqKtv!CL1-jYi~ZT@4{rL z3KVkyVrC#_VPN350@6%Kd_N%D0g0cn*~Unm5vw+!D!4Hi+9tOcn=>{}-eWAy*f#lw z@naC%1jyce!^DeGj(-ABuL4v*km3jV0Oq9ilO4>ug!qpDg&dHCFHgQ>R)@&hyR$<3C@SWKS$!}6XG|0AF(b|iQFn*74*7Z%~oU##yl$~FR3 zase?2a04+T5Q97>0rX_sBciy44~ZeC(;YVqXipd|ni09a-K delta 1498 zcmah}J!lj`6rQ=L37WWTOpK7Ikr+HkF1LI6x%{A6(ny40VG4@~S$8+ddV9CW?q19( zdKQ8pDKyhYQV1e~gsEDhP}R9F*RFx0jYBJ>v>Gp{;jV(6w091isD z0bd$sj6>WEc)DC#9m!+>`CJpJ5Mf?kiwF$DBydh1v=6Z7n9D03mqdxzeHh`*zcKj@ zxC1OW2;CcCTC^R{^~K!x;AKw*IYr`Rpy!1mL5+f5w9P`WeV9*p2EP4Zp&s`;SjT)n z#EHQ8zKRT}9)p*Obyh+V&Q#UalAIlbC%FQUZveL(zKHKb2aIrYOf(h4bFe-TU?`j> z^O}_dj3bBxMTEQ^aa&jjJ1`4iSU1j?9ew!DHE)eLek*Ve8xc!E4Qj)ZAU93IX(otcECJuB zrl_ROx}TSXI8l8&a3LYThNV(>3m?%H!{1@8)Uha3=ZCsz!!S@qr}!s~ZKkuwuyAY` zEF25LfrTH%!r5;6Q=~vos0^>IR^64()8k?ie7#`E!w|FZgKKy|@f^F9xz{c(090ah zj(yAAYCu=-4A1;GV-6(o1F|65^?YKo%GvcIWYq=P9y|NYeUoE+wxnydpXW9j>(=Y;( tTWXo~xpt|br}WdRnbHi)a-mQ2wr8ZGZ;75)T>?M;>Dc|b%k1aeqdx`l*2e$< diff --git a/kernel_boot/boards/zed_fmcs2/devicetree.dts b/kernel_boot/boards/zed_fmcs2/devicetree.dts index 722c2d6..1f3a53f 100644 --- a/kernel_boot/boards/zed_fmcs2/devicetree.dts +++ b/kernel_boot/boards/zed_fmcs2/devicetree.dts @@ -623,7 +623,7 @@ #address-cells = <0x1>; #size-cells = <0x1>; ranges; - +/* i2c@41600000 { compatible = "xlnx,axi-iic-1.01.b", "xlnx,xps-iic-2.00.a"; reg = <0x41600000 0x10000>; @@ -679,7 +679,6 @@ }; }; -/* dma@43000000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x43000000 0x10000>; @@ -740,7 +739,6 @@ linux,phandle = <0x13>; phandle = <0x13>; }; -*/ axi-i2s@77600000 { compatible = "adi,axi-i2s-1.00.a"; @@ -754,7 +752,7 @@ phandle = <0x15>; }; - /*axi-sysid-0@45000000 { + axi-sysid-0@45000000 { compatible = "adi,axi-sysid-1.00.a"; reg = <0x45000000 0x10000>; };*/ diff --git a/user_space/side_ch_ctl_src/iq_capture.py b/user_space/side_ch_ctl_src/iq_capture.py new file mode 100755 index 0000000..1a0e046 --- /dev/null +++ b/user_space/side_ch_ctl_src/iq_capture.py @@ -0,0 +1,122 @@ +# +# openwifi side info receive and display program +# Xianjun jiao. putaoshu@msn.com; xianjun.jiao@imec.be +# +import os +import sys +import socket +import numpy as np +import matplotlib.pyplot as plt + +def display_iq(iq_capture, agc_gain, rssi_half_db): + + fig_iq_capture = plt.figure(0) + fig_iq_capture.clf() + plt.xlabel("sample") + plt.ylabel("I/Q") + plt.title("I (blue) and Q (red) capture") + plt.plot(iq_capture.real, 'b') + plt.plot(iq_capture.imag, 'r') + plt.ylim(-32767, 32767) + fig_iq_capture.show() + plt.pause(0.0001) + + agc_gain_lock = np.copy(agc_gain) + agc_gain_lock[agc_gain>127] = 80 # agc lock + agc_gain_lock[agc_gain<=127] = 0 # agc not lock + + agc_gain_value = np.copy(agc_gain) + agc_gain_value[agc_gain>127] = agc_gain[agc_gain>127] - 128 + + fig_agc_gain = plt.figure(1) + fig_agc_gain.clf() + plt.xlabel("sample") + plt.ylabel("gain/lock") + plt.title("AGC gain (blue) and lock status (red)") + plt.plot(agc_gain_value, 'b') + plt.plot(agc_gain_lock, 'r') + plt.ylim(0, 82) + fig_agc_gain.show() + plt.pause(0.0001) + + fig_rssi_half_db = plt.figure(2) + fig_rssi_half_db.clf() + plt.xlabel("sample") + plt.ylabel("dB") + plt.title("RSSI half dB (uncalibrated)") + plt.plot(rssi_half_db) + plt.ylim(100, 270) + fig_rssi_half_db.show() + plt.pause(0.0001) + +def parse_iq(iq, iq_len): + # print(len(iq), iq_len) + num_dma_symbol_per_trans = 1 + iq_len + num_int16_per_trans = num_dma_symbol_per_trans*4 # 64bit per dma symbol + num_trans = round(len(iq)/num_int16_per_trans) + # print(len(iq), iq.dtype, num_trans) + iq = iq.reshape([num_trans, num_int16_per_trans]) + + timestamp = iq[:,0] + pow(2,16)*iq[:,1] + pow(2,32)*iq[:,2] + pow(2,48)*iq[:,3] + iq_capture = iq[:,4::4] + iq[:,5::4]*1j + agc_gain = iq[:,6::4] + rssi_half_db = iq[:,7::4] + # print(num_trans, iq_len, iq_capture.shape, agc_gain.shape, rssi_half_db.shape) + + iq_capture = iq_capture.reshape([num_trans*iq_len,]) + agc_gain = agc_gain.reshape([num_trans*iq_len,]) + rssi_half_db = rssi_half_db.reshape([num_trans*iq_len,]) + + return timestamp, iq_capture, agc_gain, rssi_half_db + +UDP_IP = "192.168.10.1" #Local IP to listen +UDP_PORT = 4000 #Local port to listen + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP +sock.bind((UDP_IP, UDP_PORT)) + +# align with side_ch_control.v and all related user space, remote files +MAX_NUM_DMA_SYMBOL = 8192 + +if len(sys.argv)<2: + print("Assume iq_len = 8187! (Max UDP 65507 bytes; (65507/8)-1 = 8187)") + iq_len = 8187 +else: + iq_len = int(sys.argv[1]) + print(iq_len) + # print(type(num_eq)) + +if iq_len>8187: + iq_len = 8187 + print('Limit iq_len to 8187! (Max UDP 65507 bytes; (65507/8)-1 = 8187)') + +num_dma_symbol_per_trans = 1 + iq_len +num_byte_per_trans = 8*num_dma_symbol_per_trans + +if os.path.exists("iq.txt"): + os.remove("iq.txt") +iq_fd=open('iq.txt','a') + +while True: + try: + data, addr = sock.recvfrom(MAX_NUM_DMA_SYMBOL*8) # buffer size + # print(addr) + test_residual = len(data)%num_byte_per_trans + # print(len(data)/8, num_dma_symbol_per_trans, test_residual) + if (test_residual != 0): + print("Abnormal length") + + iq = np.frombuffer(data, dtype='int16') + np.savetxt(iq_fd, iq) + + timestamp, iq_capture, agc_gain, rssi_half_db = parse_iq(iq, iq_len) + print(timestamp) + display_iq(iq_capture, agc_gain, rssi_half_db) + + except KeyboardInterrupt: + print('User quit') + break + +print('close()') +side_info_fd.close() +sock.close() diff --git a/user_space/side_ch_ctl_src/side_ch_ctl.c b/user_space/side_ch_ctl_src/side_ch_ctl.c index 5eaf375..af1e0ce 100644 --- a/user_space/side_ch_ctl_src/side_ch_ctl.c +++ b/user_space/side_ch_ctl_src/side_ch_ctl.c @@ -18,7 +18,7 @@ #include // #define NETLINK_USER 31 -#define MAX_NUM_DMA_SYMBOL 4096 //align with side_ch.v side_ch.h +#define MAX_NUM_DMA_SYMBOL 8192 //align with side_ch.v side_ch.h #define MAX_PAYLOAD (8*MAX_NUM_DMA_SYMBOL) /* maximum payload size*/ struct sockaddr_nl src_addr, dest_addr; @@ -134,8 +134,8 @@ long int hextoi_my(char *para) { // write 987 to hardware register 3: wh3d987 (w--write; h--hardware; 3 --register idx; d--decimal; 987--value) // write 0x3db to software register 19: ws19h3db (w--write; s--software; 19--register idx; h--hex; 3db--value 0x3db) // read software register 23: rs23 (r-- read; s--software; 23--register idx) -// get csi and equalizer output: g4 (g-- get; 4--every 4*100ms; no/wrong input means default 100ms) -int parse_para_string(char *para, int *action_flag, int *reg_type, int *reg_idx, unsigned int *reg_val, int *interval_100ms) { +// get csi and equalizer output: g400 (g-- get; 400--every 400ms; no/wrong input means default 100ms) +int parse_para_string(char *para, int *action_flag, int *reg_type, int *reg_idx, unsigned int *reg_val, int *interval_ms) { int i, para_string_len, num_char_reg_idx, num_char_reg_val, hex_flag; para_string_len = strlen(para); @@ -150,17 +150,17 @@ int parse_para_string(char *para, int *action_flag, int *reg_type, int *reg_idx, (*action_flag) = ACTION_SIDE_INFO_GET; if (para_string_len == 1) { // no explict input - (*interval_100ms) = 1; - printf("The default 1*100ms side info getting period is taken!\n"); + (*interval_ms) = 100; + printf("The default 100ms side info getting period is taken!\n"); return(0); } // there is something input - (*interval_100ms) = atoi_my(para+1); - if ( (*interval_100ms)<0 ) { // for invalid input, we set it to the default 100ms = 1*100ms; - (*interval_100ms) = 1; + (*interval_ms) = atoi_my(para+1); + if ( (*interval_ms)<0 ) { // for invalid input, we set it to the default 100ms + (*interval_ms) = 100; printf("Invalid side info getting period!\n"); - printf("The default 1*100ms side info getting period is taken!\n"); + printf("The default 100ms side info getting period is taken!\n"); } return(0); @@ -269,7 +269,7 @@ void print_usage(void) { printf("write 987 to hardware register 3: wh3d987 (w--write; h--hardware; 3 --register idx; d--decimal; 987--value)\n"); printf("write 0x3db to software register 19: ws19h3db (w--write; s--software; 19--register idx; h--hex; 3db--value 0x3db)\n"); printf(" read software register 23: rs23 (r-- read; s--software; 23--register idx)\n"); - printf(" get csi and equalizer output: g2 (g-- get; 4--every 4*100ms; no/wrong input means default 100ms)\n"); + printf(" get csi and equalizer output: g400 (g-- get; 400--every 400ms; no/wrong input means default 100ms)\n"); } volatile bool do_exit = false; @@ -282,7 +282,7 @@ void sigint_callback_handler(int signum) int main(const int argc, char * const argv[]) { - int action_flag, reg_type, reg_idx, interval_100ms, s, side_info_size, socket_ok = 1, loop_count=0, side_info_count=0; + int action_flag, reg_type, reg_idx, interval_ms, s, side_info_size, socket_ok = 1, loop_count=0, side_info_count=0; unsigned int reg_val, *cmd_buf; unsigned short port; struct sockaddr_in server; @@ -294,9 +294,9 @@ int main(const int argc, char * const argv[]) return(ret); } - ret = parse_para_string(argv[1], &action_flag, ®_type, ®_idx, ®_val, &interval_100ms); + ret = parse_para_string(argv[1], &action_flag, ®_type, ®_idx, ®_val, &interval_ms); printf("parse: ret %d\n", ret); - printf(" tx: action_flag %d reg_type %d reg_idx %d reg_val %u interval_100ms %d\n", action_flag, reg_type, reg_idx, reg_val, interval_100ms); + printf(" tx: action_flag %d reg_type %d reg_idx %d reg_val %u interval_ms %d\n", action_flag, reg_type, reg_idx, reg_val, interval_ms); if (ret<0) { printf("Wrong input!\n"); print_usage(); @@ -378,7 +378,7 @@ int main(const int argc, char * const argv[]) // printf("Received message payload: %s\n", (char *)NLMSG_DATA(nlh)); side_info_size = nlh->nlmsg_len-NLMSG_HDRLEN; - // printf("%d %d %d %d %d %d %d %d\n", cmd_buf[0], cmd_buf[1], cmd_buf[2], cmd_buf[3], cmd_buf[4], cmd_buf[5], cmd_buf[6], cmd_buf[7]); + // printf("num_dma_symbol %d\n", side_info_size/8); if (action_flag!=ACTION_SIDE_INFO_GET) { printf(" rx: size %d val %d 0x%08x\n", side_info_size, cmd_buf[0], cmd_buf[0]); @@ -394,7 +394,7 @@ int main(const int argc, char * const argv[]) if ((loop_count%64) == 0) printf("loop %d side info count %d\n", loop_count, side_info_count); - usleep(interval_100ms*100*1000); + usleep(interval_ms*1000); } close(s); diff --git a/user_space/side_ch_ctl_src/side_info_display.py b/user_space/side_ch_ctl_src/side_info_display.py index 71cc6d1..0e3560f 100755 --- a/user_space/side_ch_ctl_src/side_info_display.py +++ b/user_space/side_ch_ctl_src/side_info_display.py @@ -114,6 +114,7 @@ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP sock.bind((UDP_IP, UDP_PORT)) # align with side_ch_control.v and all related user space, remote files +MAX_NUM_DMA_SYMBOL = 8192 CSI_LEN = 56 # length of single CSI EQUALIZER_LEN = (56-4) # for non HT, four {32767,32767} will be padded to achieve 52 (non HT should have 48) HEADER_LEN = 2 # timestamp and frequency offset @@ -135,7 +136,7 @@ side_info_fd=open('side_info.txt','a') while True: try: - data, addr = sock.recvfrom(32768) # buffer size + data, addr = sock.recvfrom(MAX_NUM_DMA_SYMBOL*8) # buffer size # print(addr) print(len(data), num_byte_per_trans) test_residual = len(data)%num_byte_per_trans diff --git a/user_space/side_ch_ctl_src/test_iq_file_display.m b/user_space/side_ch_ctl_src/test_iq_file_display.m new file mode 100644 index 0000000..a3668df --- /dev/null +++ b/user_space/side_ch_ctl_src/test_iq_file_display.m @@ -0,0 +1,47 @@ +% Xianjun Jiao. xianjun.jiao@imec.be; putaoshu@msn.com + +clear all; +close all; + +iq_len = 8187; + +a = load('iq.txt'); +len_a = floor(length(a)/4)*4; +a = a(1:len_a); + +b = reshape(a, [4, length(a)/4])'; +num_data_in_each_iq_capture = 1 + iq_len; +num_iq_capture = floor(size(b,1)/num_data_in_each_iq_capture); + +iq_capture = zeros(iq_len, num_iq_capture); +timestamp = zeros(1, num_iq_capture); +agc_gain = zeros(iq_len, num_iq_capture); +rssi_half_db = zeros(iq_len, num_iq_capture); + +for i=1:num_iq_capture + sp = (i-1)*num_data_in_each_iq_capture + 1; + ep = i*num_data_in_each_iq_capture; + timestamp(i) = b(sp,1) + (2^16)*b(sp,2) + (2^32)*b(sp,3) + (2^48)*b(sp,4); + iq_capture(:,i) = b((sp+1):ep,1) + 1i.*b((sp+1):ep,2); + agc_gain(:,i) = b((sp+1):ep,3); + rssi_half_db(:,i) = b((sp+1):ep,4); +end +iq_capture = iq_capture(:); +agc_gain = agc_gain(:); +rssi_half_db = rssi_half_db(:); + +agc_gain_lock = zeros(iq_len*num_iq_capture,1); +agc_gain_lock(agc_gain>127) = 1; + +agc_gain_value = agc_gain; +agc_gain_value(agc_gain_value>127) = agc_gain_value(agc_gain_value>127) - 128; + +figure; plot(timestamp); title('time stamp (TSF value)'); ylabel('us'); xlabel('packet'); grid on; +figure; plot(rssi_half_db); title('RSSI half dB (uncalibrated)'); xlabel('sample'); ylabel('dB'); grid on; + +figure; +plot(real(iq_capture)); hold on; plot(imag(iq_capture),'r'); title('I (blue) Q (red) sample'); xlabel('sample'); ylabel('I/Q'); grid on; + +figure; +subplot(2,1,1); plot(agc_gain_lock); title('AGC lock status from AD9361'); xlabel('sample'); ylabel('status'); grid on; +subplot(2,1,2); plot(agc_gain_value); title('AGC gain from AD9361'); xlabel('sample'); ylabel('gain'); grid on; diff --git a/user_space/side_ch_ctl_src/test_side_info_file_display.m b/user_space/side_ch_ctl_src/test_side_info_file_display.m index a3e6263..471a28f 100644 --- a/user_space/side_ch_ctl_src/test_side_info_file_display.m +++ b/user_space/side_ch_ctl_src/test_side_info_file_display.m @@ -6,9 +6,12 @@ close all; num_eq = 8; a = load('side_info.txt'); +len_a = floor(length(a)/4)*4; +a = a(1:len_a); + b = reshape(a, [4, length(a)/4])'; num_data_in_each_side_info = 2+56+num_eq*52; -num_side_info = size(b,1)/num_data_in_each_side_info; +num_side_info = floor(size(b,1)/num_data_in_each_side_info); side_info = zeros(num_data_in_each_side_info, num_side_info); timestamp = zeros(1, num_side_info);