From 60c262fd182ccc949f0d10e8c22c06832bdf9339 Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Sun, 23 Mar 2025 08:42:11 +0000 Subject: [PATCH 01/11] docs: Move TX/RX power FAQ entries to HackRF One page --- docs/source/faq.rst | 43 -------------------------------------- docs/source/hackrf_one.rst | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 43 deletions(-) diff --git a/docs/source/faq.rst b/docs/source/faq.rst index cfaf9d08..ba49f66d 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -5,49 +5,6 @@ FAQ ================================================ -What is the Transmit Power of HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF One's absolute maximum TX power varies by operating frequency: - - * 1 MHz to 10 MHz: 5 dBm to 15 dBm, generally increasing as frequency increases (see this `blog post `__) - * 10 MHz to 2170 MHz: 5 dBm to 15 dBm, generally decreasing as frequency increases - * 2170 MHz to 2740 MHz: 13 dBm to 15 dBm - * 2740 MHz to 4000 MHz: 0 dBm to 5 dBm, decreasing as frequency increases - * 4000 MHz to 6000 MHz: -10 dBm to 0 dBm, generally decreasing as frequency increases - -Through most of the frequency range up to 4 GHz, the maximum TX power is between 0 and 10 dBm. The frequency range with best performance is 2170 MHz to 2740 MHz. - -Overall, the output power is enough to perform over-the-air experiments at close range or to drive an external amplifier. If you connect an external amplifier, you should also use an external bandpass filter for your operating frequency. - -Before you transmit, know your laws. HackRF One has not been tested for compliance with regulations governing transmission of radio signals. You are responsible for using your HackRF One legally. - - ----- - - -What is the Receive Power of HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The maximum RX power of HackRF One is -5 dBm. Exceeding -5 dBm can result in permanent damage! - -In theory, HackRF One can safely accept up to 10 dBm with the front-end RX amplifier disabled. However, a simple software or user error could enable the amplifier, resulting in permanent damage. It is better to use an external attenuator than to risk damage. - - ----- - - -What is the minimum signal power level that can be detected by HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This isn't a question that can be answered for a general purpose SDR platform such as HackRF. Any answer would be very specific to a particular application. For example, an answerable question might be: What is the minimum power level in dBm of modulation M at frequency F that can be detected by HackRF One with software S under configuration C at a bit error rate of no more than E%? Changing any of those variables (M, F, S, C, or E) would change the answer to the question. Even a seemingly minor software update might result in a significantly different answer. To learn the exact answer for a specific application, you would have to measure it yourself. - -HackRF's concrete specifications include operating frequency range, maximum sample rate, and dynamic range in bits. These specifications can be used to roughly determine the suitability of HackRF for a given application. Testing is required to finely measure performance in an application. Performance can typically be enhanced significantly by selecting an appropriate antenna, external amplifier, and/or external filter for the application. - - ----- - - Is HackRF full-duplex? ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/hackrf_one.rst b/docs/source/hackrf_one.rst index 7abddf2d..a152fef6 100644 --- a/docs/source/hackrf_one.rst +++ b/docs/source/hackrf_one.rst @@ -26,4 +26,43 @@ Features * portable * open source +What is the Receive Power of HackRF? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The maximum RX power of HackRF One is -5 dBm. Exceeding -5 dBm can result in permanent damage! + +In theory, HackRF One can safely accept up to 10 dBm with the front-end RX amplifier disabled. However, a simple software or user error could enable the amplifier, resulting in permanent damage. It is better to use an external attenuator than to risk damage. + + +---- + + +What is the minimum signal power level that can be detected by HackRF? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This isn't a question that can be answered for a general purpose SDR platform such as HackRF. Any answer would be very specific to a particular application. For example, an answerable question might be: What is the minimum power level in dBm of modulation M at frequency F that can be detected by HackRF One with software S under configuration C at a bit error rate of no more than E%? Changing any of those variables (M, F, S, C, or E) would change the answer to the question. Even a seemingly minor software update might result in a significantly different answer. To learn the exact answer for a specific application, you would have to measure it yourself. + +HackRF's concrete specifications include operating frequency range, maximum sample rate, and dynamic range in bits. These specifications can be used to roughly determine the suitability of HackRF for a given application. Testing is required to finely measure performance in an application. Performance can typically be enhanced significantly by selecting an appropriate antenna, external amplifier, and/or external filter for the application. + + +What is the Transmit Power of HackRF? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +HackRF One's absolute maximum TX power varies by operating frequency: + + * 1 MHz to 10 MHz: 5 dBm to 15 dBm, generally increasing as frequency increases (see this `blog post `__) + * 10 MHz to 2170 MHz: 5 dBm to 15 dBm, generally decreasing as frequency increases + * 2170 MHz to 2740 MHz: 13 dBm to 15 dBm + * 2740 MHz to 4000 MHz: 0 dBm to 5 dBm, decreasing as frequency increases + * 4000 MHz to 6000 MHz: -10 dBm to 0 dBm, generally decreasing as frequency increases + +Through most of the frequency range up to 4 GHz, the maximum TX power is between 0 and 10 dBm. The frequency range with best performance is 2170 MHz to 2740 MHz. + +Overall, the output power is enough to perform over-the-air experiments at close range or to drive an external amplifier. If you connect an external amplifier, you should also use an external bandpass filter for your operating frequency. + +Before you transmit, know your laws. HackRF One has not been tested for compliance with regulations governing transmission of radio signals. You are responsible for using your HackRF One legally. + + +---- + From 87e779306a9c607e62849fcb1fd151e8bf5c4f0c Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Mon, 24 Mar 2025 13:36:56 +0000 Subject: [PATCH 02/11] docs: adjust input/output power titles & wording --- docs/source/hackrf_one.rst | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/docs/source/hackrf_one.rst b/docs/source/hackrf_one.rst index a152fef6..d8b080fb 100644 --- a/docs/source/hackrf_one.rst +++ b/docs/source/hackrf_one.rst @@ -26,29 +26,27 @@ Features * portable * open source -What is the Receive Power of HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The maximum RX power of HackRF One is -5 dBm. Exceeding -5 dBm can result in permanent damage! +Maximum input power +~~~~~~~~~~~~~~~~~~~ + +The maximum input power of HackRF One is -5 dBm. Exceeding -5 dBm can result in permanent damage! In theory, HackRF One can safely accept up to 10 dBm with the front-end RX amplifier disabled. However, a simple software or user error could enable the amplifier, resulting in permanent damage. It is better to use an external attenuator than to risk damage. ----- - - -What is the minimum signal power level that can be detected by HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Minimum detectable input power +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This isn't a question that can be answered for a general purpose SDR platform such as HackRF. Any answer would be very specific to a particular application. For example, an answerable question might be: What is the minimum power level in dBm of modulation M at frequency F that can be detected by HackRF One with software S under configuration C at a bit error rate of no more than E%? Changing any of those variables (M, F, S, C, or E) would change the answer to the question. Even a seemingly minor software update might result in a significantly different answer. To learn the exact answer for a specific application, you would have to measure it yourself. HackRF's concrete specifications include operating frequency range, maximum sample rate, and dynamic range in bits. These specifications can be used to roughly determine the suitability of HackRF for a given application. Testing is required to finely measure performance in an application. Performance can typically be enhanced significantly by selecting an appropriate antenna, external amplifier, and/or external filter for the application. -What is the Transmit Power of HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Typical maximum transmit power +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -HackRF One's absolute maximum TX power varies by operating frequency: +HackRF One's maximum TX power varies by operating frequency: * 1 MHz to 10 MHz: 5 dBm to 15 dBm, generally increasing as frequency increases (see this `blog post `__) * 10 MHz to 2170 MHz: 5 dBm to 15 dBm, generally decreasing as frequency increases @@ -61,8 +59,3 @@ Through most of the frequency range up to 4 GHz, the maximum TX power is between Overall, the output power is enough to perform over-the-air experiments at close range or to drive an external amplifier. If you connect an external amplifier, you should also use an external bandpass filter for your operating frequency. Before you transmit, know your laws. HackRF One has not been tested for compliance with regulations governing transmission of radio signals. You are responsible for using your HackRF One legally. - - ----- - - From bb03d1c42ae414ee2edea6e7b654f09a641ce10b Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Sun, 23 Mar 2025 08:44:01 +0000 Subject: [PATCH 03/11] docs: Remove full-duplex FAQ entries --- docs/source/faq.rst | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/docs/source/faq.rst b/docs/source/faq.rst index ba49f66d..daa869b4 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -4,36 +4,6 @@ FAQ ================================================ - -Is HackRF full-duplex? -~~~~~~~~~~~~~~~~~~~~~~ - -HackRF One is a half-duplex transceiver. This means that it can transmit or receive but not both at the same time. - - ----- - - -Why isn't HackRF One full-duplex? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF One is designed to support the widest possible range of SDR applications in a single, low cost, portable device. Many applications do not require full-duplex operation. Full-duplex support would have made HackRF larger and more expensive, and it would have required an external power supply. Since full-duplex needs can be met by simply using a second HackRF One, it made sense to keep the device small, portable, and low cost for everyone who does not require full-duplex operation. - - ----- - - -How could the HackRF One design be changed to make it full-duplex? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The HackRF One hardware design is actually full-duplex (at lower sample rates) from the USB connection through the ADC/DAC. The RF section is the only part of the design that cannot support full-duplex operation. The easiest way to make HackRF One full-duplex would be to create an add-on board that duplicates the RF section and also provides an external power input (from a wall wart, for example) for the additional power required. This would also require software effort; the firmware, CPLD, libhackrf, and other host software would all need work to support full-duplex operation. - -If you were to try to redesign the RF section on HackRF One to support full-duplex, the main thing to focus on would be the MAX2837 (intermediate frequency transceiver). This part is half-duplex, so you would either need two of them or you would have to redesign the RF section to use something other than the MAX2837, likely resulting in a radically different design. If you used two MAX2837s you might be able to use one RFFC5071 instead of two RFFC5072s. - - ----- - - .. _bigspike: What is the big spike in the center of my received spectrum? From 20e5830c2ef40589c2f62b50bdb5899eeec57c40 Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Mon, 24 Mar 2025 14:25:55 +0000 Subject: [PATCH 04/11] docs: add links to product page & resellers on HackRF one page, remove from faq --- docs/source/faq.rst | 11 ----------- docs/source/hackrf_one.rst | 3 ++- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/source/faq.rst b/docs/source/faq.rst index daa869b4..c9f407d2 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -80,14 +80,3 @@ Why are the LEDs on HackRF different colours? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Each LED is a single color. There are no multi-colored LEDs on HackRF One. Adjacent LEDs are different colors in order to make them easier to distinguish from one another. The colors do not mean anything. - - ----- - - -Where can I purchase HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF is designed and manufactured by Great Scott Gadgets. We do not sell low volumes of HackRFs to people individually; instead we have agreements with specific resellers. Please see our reseller list on the Great Scott Gadgets website for availability: `http://greatscottgadgets.com/hackrf/ `__. - -HackRF is open source hardware, so you can also build your own. diff --git a/docs/source/hackrf_one.rst b/docs/source/hackrf_one.rst index d8b080fb..e46e2877 100644 --- a/docs/source/hackrf_one.rst +++ b/docs/source/hackrf_one.rst @@ -7,7 +7,8 @@ HackRF One HackRF One is the current hardware platform for the HackRF project. It is a Software Defined Radio peripheral capable of transmission or reception of radio signals from 1 MHz to 6 GHz. Designed to enable test and development of modern and next generation radio technologies, HackRF One is an open source hardware platform that can be used as a USB peripheral or programmed for stand-alone operation. - +| `Product page `_ +| `Where to buy `_ Features ~~~~~~~~ From 2d5070832c46b53d6e3606e4b2901da11f2f56cd Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 10:05:51 +0000 Subject: [PATCH 05/11] docs: move gain info from FAQ --- docs/source/faq.rst | 33 --------------------------------- docs/source/setting_gain.rst | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/docs/source/faq.rst b/docs/source/faq.rst index c9f407d2..1f9190de 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -40,39 +40,6 @@ Start by reading :ref:`our FAQ Response on the DC Spike `. After that, #. Correct it. There are various ways of removing the DC offset in software. However, these techniques may degrade parts of the signal that are close to 0 Hz. It may look better, but that doesn't necessarily mean that it is better from the standpoint of a demodulator algorithm, for example. Still, correcting the DC offset is often a good choice. - - ---- - - - -What gain controls are provided by HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF (both Jawbreaker and One) provides three different analog gain controls on RX and two on TX. - -The three RX gain controls are at these stages: - -- RF ("amp", 0 or ~11 dB) -- IF ("lna", 0 to 40 dB in 8 dB steps) -- baseband ("vga", 0 to 62 dB in 2 dB steps) - -The two TX gain controls are at these stages: - -- RF (0 or ~11 dB) -- IF (0 to 47 dB in 1 dB steps) - -Note: in some documents, the RF gain was erroneously quoted to be 14 dB. The confusion was based on the fact that the MGA-81563 amplifier is advertised as a "14 dBm" amplifier, but that specifies its output power, not its amplification. See `Martin Ling's comment on issue #1059 `__ for some details! - ----- - - -Why is the RF gain setting restricted to two values? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF has two RF amplifiers close to the antenna port, one for TX and one for RX. These amplifiers have two settings: on or off. In the off state, the amps are completely bypassed. They nominally provide around 11 dB of gain when on, but the actual amount of gain varies by frequency. In general, expect less gain at higher frequencies. For fine control of gain, use the IF and/or baseband gain options. - - ---- diff --git a/docs/source/setting_gain.rst b/docs/source/setting_gain.rst index eae8bfd3..bf321ecd 100644 --- a/docs/source/setting_gain.rst +++ b/docs/source/setting_gain.rst @@ -2,4 +2,32 @@ Setting Gain Controls for RX ============================ +What gain controls are provided by HackRF? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +HackRF (both Jawbreaker and One) provides three different analog gain controls on RX and two on TX. + +The three RX gain controls are at these stages: + +- RF ("amp", 0 or ~11 dB) +- IF ("lna", 0 to 40 dB in 8 dB steps) +- baseband ("vga", 0 to 62 dB in 2 dB steps) + +The two TX gain controls are at these stages: + +- RF (0 or ~11 dB) +- IF (0 to 47 dB in 1 dB steps) + +Note: in some documents, the RF gain was erroneously quoted to be 14 dB. The confusion was based on the fact that the MGA-81563 amplifier is advertised as a "14 dBm" amplifier, but that specifies its output power, not its amplification. See `Martin Ling's comment on issue #1059 `__ for some details! + +---- + + +Why is the RF gain setting restricted to two values? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +HackRF has two RF amplifiers close to the antenna port, one for TX and one for RX. These amplifiers have two settings: on or off. In the off state, the amps are completely bypassed. They nominally provide around 11 dB of gain when on, but the actual amount of gain varies by frequency. In general, expect less gain at higher frequencies. For fine control of gain, use the IF and/or baseband gain options. + + + A good default setting to start with is RF=0 (off), IF=16, baseband=16. Increase or decrease the IF and baseband gain controls roughly equally to find the best settings for your situation. Turn on the RF amp if you need help picking up weak signals. If your gain settings are too low, your signal may be buried in the noise. If one or more of your gain settings is too high, you may see distortion (look for unexpected frequencies that pop up when you increase the gain) or the noise floor may be amplified more than your signal is. From fd20d32774777e49a588a5b7d573b87259943d75 Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 10:11:04 +0000 Subject: [PATCH 06/11] docs: reword gain settings --- docs/source/setting_gain.rst | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/source/setting_gain.rst b/docs/source/setting_gain.rst index bf321ecd..680a1c8e 100644 --- a/docs/source/setting_gain.rst +++ b/docs/source/setting_gain.rst @@ -2,10 +2,10 @@ Setting Gain Controls for RX ============================ -What gain controls are provided by HackRF? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Gain controls +~~~~~~~~~~~~~ -HackRF (both Jawbreaker and One) provides three different analog gain controls on RX and two on TX. +HackRF One provides three different analog gain controls on RX and two on TX. The three RX gain controls are at these stages: @@ -20,14 +20,6 @@ The two TX gain controls are at these stages: Note: in some documents, the RF gain was erroneously quoted to be 14 dB. The confusion was based on the fact that the MGA-81563 amplifier is advertised as a "14 dBm" amplifier, but that specifies its output power, not its amplification. See `Martin Ling's comment on issue #1059 `__ for some details! ----- - - -Why is the RF gain setting restricted to two values? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -HackRF has two RF amplifiers close to the antenna port, one for TX and one for RX. These amplifiers have two settings: on or off. In the off state, the amps are completely bypassed. They nominally provide around 11 dB of gain when on, but the actual amount of gain varies by frequency. In general, expect less gain at higher frequencies. For fine control of gain, use the IF and/or baseband gain options. - - +The TX and RX RF amplifiers have two settings: on or off. In the off state, the amps are completely bypassed. They nominally provide around 11 dB of gain when on, but the actual amount of gain varies by frequency. In general, expect less gain at higher frequencies. For fine control of gain, use the IF and/or baseband gain options. A good default setting to start with is RF=0 (off), IF=16, baseband=16. Increase or decrease the IF and baseband gain controls roughly equally to find the best settings for your situation. Turn on the RF amp if you need help picking up weak signals. If your gain settings are too low, your signal may be buried in the noise. If one or more of your gain settings is too high, you may see distortion (look for unexpected frequencies that pop up when you increase the gain) or the noise floor may be amplified more than your signal is. From a7d9d853ff7bfe28307f88d41e5c03428a3c4eec Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 10:14:35 +0000 Subject: [PATCH 07/11] docs: move LED color info from FAQ --- docs/source/faq.rst | 8 -------- docs/source/leds.rst | 3 ++- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/docs/source/faq.rst b/docs/source/faq.rst index 1f9190de..a96f329e 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -39,11 +39,3 @@ Start by reading :ref:`our FAQ Response on the DC Spike `. After that, #. Avoid it. The best way to handle DC offset for most applications is to use offset tuning; instead of tuning to your exact frequency of interest, tune to a nearby frequency so that the entire signal you are interested in is shifted away from 0 Hz but still within the received bandwidth. If your algorithm works best with your signal centered at 0 Hz (many do), you can shift the frequency in the digital domain, moving your signal of interest to 0 Hz and your DC offset away from 0 Hz. HackRF's high maximum sampling rate can be a big help as it allows you to use offset tuning even for relatively wideband signals. #. Correct it. There are various ways of removing the DC offset in software. However, these techniques may degrade parts of the signal that are close to 0 Hz. It may look better, but that doesn't necessarily mean that it is better from the standpoint of a demodulator algorithm, for example. Still, correcting the DC offset is often a good choice. - ----- - - -Why are the LEDs on HackRF different colours? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Each LED is a single color. There are no multi-colored LEDs on HackRF One. Adjacent LEDs are different colors in order to make them easier to distinguish from one another. The colors do not mean anything. diff --git a/docs/source/leds.rst b/docs/source/leds.rst index 519e0abd..fa598d41 100644 --- a/docs/source/leds.rst +++ b/docs/source/leds.rst @@ -2,7 +2,8 @@ LEDs ==== - When HackRF One is plugged in to a USB host, four LEDs should turn on: 3V3, 1V8, RF, and USB. The 3V3 LED indicates that the primary internal power supply is working properly. The 1V8 and RF LEDs indicate that firmware is running and has switched on additional internal power supplies. The USB LED indicates that the HackRF One is communicating with the host over USB. The RX and TX LEDs indicate that a receive or transmit operation is currently in progress. + +Each LED is a single color. There are no multi-colored LEDs on HackRF One. Adjacent LEDs are different colors in order to make them easier to distinguish from one another. The colors do not mean anything. From 1c691c4a56345ef0a7e078aacf0fe57e2282918b Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 10:46:47 +0000 Subject: [PATCH 08/11] docs: rename FAQ to Troubleshooting --- docs/source/getting_help.rst | 2 +- docs/source/index.rst | 2 +- docs/source/{faq.rst => troubleshooting.rst} | 20 +++++++------------- 3 files changed, 9 insertions(+), 15 deletions(-) rename docs/source/{faq.rst => troubleshooting.rst} (89%) diff --git a/docs/source/getting_help.rst b/docs/source/getting_help.rst index 83418c4e..d6b145d8 100644 --- a/docs/source/getting_help.rst +++ b/docs/source/getting_help.rst @@ -2,7 +2,7 @@ Getting Help ============ -Before asking for help with HackRF, check to see if your question is answered in this documentation, listed in the :ref:`FAQ `, or addressed in the `HackRF GitHub repository issues `__. +Before asking for help with HackRF, check to see if your question is answered in this documentation, listed in the :ref:`Troubleshooting ` page, or addressed in the `HackRF GitHub repository issues `__. For assistance with HackRF general use or development, please look at the `issues on the GitHub project `__. This is the preferred place to ask questions so that others may locate the answer to your question in the future. diff --git a/docs/source/index.rst b/docs/source/index.rst index da261612..25379195 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -7,7 +7,7 @@ Welcome to HackRF's documentation! :caption: User Documentation getting_help - faq + troubleshooting synchronization_checklist hackrf_projects_mentions diff --git a/docs/source/faq.rst b/docs/source/troubleshooting.rst similarity index 89% rename from docs/source/faq.rst rename to docs/source/troubleshooting.rst index a96f329e..ef7dff86 100644 --- a/docs/source/faq.rst +++ b/docs/source/troubleshooting.rst @@ -1,13 +1,13 @@ -.. _faq: +.. _troubleshooting: ================================================ -FAQ +Troubleshooting ================================================ .. _bigspike: -What is the big spike in the center of my received spectrum? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +There is a big spike in the center of the received spectrum +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you see a large spike in the center of your FFT display regardless of the frequenecy you are tuned to, you are seeing a DC offset (or component or bias). The term "DC" comes from "Direct Current" in electronics. It is the unchanging aspect of a signal as opposed to the "alternating" part of the signal (AC) that changes over time. Take, for example, the signal represented by the digital sequence: @@ -23,16 +23,10 @@ There was a bug in the HackRF firmware (through release 2013.06.1) that made the A high DC offset is also one of a few symptoms that can be caused by a software version mismatch. A common problem is that people run an old version of gr-osmosdr with newer firmware. +Solution +-------- - ----- - - - -How do I deal with the big spike in the middle of my spectrum? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Start by reading :ref:`our FAQ Response on the DC Spike `. After that, there are a few options: +There are a few options: #. Ignore it. For many applications it isn't a problem. You'll learn to ignore it. From 655be2e225a459fb234cebf433377b3bac4fc8d8 Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 11:17:27 +0000 Subject: [PATCH 09/11] docs: add pictures to DC spike explanation --- docs/images/dc_spike_example_plot.png | Bin 0 -> 23964 bytes docs/images/dc_spike_example_spectrum.png | Bin 0 -> 17321 bytes docs/images/dc_spike_grc.png | Bin 0 -> 25521 bytes docs/source/troubleshooting.rst | 25 ++++++++++++++++++++-- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 docs/images/dc_spike_example_plot.png create mode 100644 docs/images/dc_spike_example_spectrum.png create mode 100644 docs/images/dc_spike_grc.png diff --git a/docs/images/dc_spike_example_plot.png b/docs/images/dc_spike_example_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..05aceec08a3b05222a5d7cf06812522405f0168e GIT binary patch literal 23964 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 YY~{fZFYgst5&!@I literal 0 HcmV?d00001 diff --git a/docs/images/dc_spike_example_spectrum.png b/docs/images/dc_spike_example_spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..f132730d24e074d224ed7a8208817e51d6195130 GIT binary patch literal 17321 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 OC|*~+mUGqo;r{|{SfI}U literal 0 HcmV?d00001 diff --git a/docs/images/dc_spike_grc.png b/docs/images/dc_spike_grc.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5320fd863b8ad970171b7ce567532f29b48ff7 GIT binary patch literal 25521 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 N1N%Jpa$Js_{~P`6U!MQ~ literal 0 HcmV?d00001 diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index ef7dff86..9ac0a33d 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -9,13 +9,34 @@ Troubleshooting There is a big spike in the center of the received spectrum ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you see a large spike in the center of your FFT display regardless of the frequenecy you are tuned to, you are seeing a DC offset (or component or bias). The term "DC" comes from "Direct Current" in electronics. It is the unchanging aspect of a signal as opposed to the "alternating" part of the signal (AC) that changes over time. Take, for example, the signal represented by the digital sequence: +If you see a large spike in the center of your FFT display regardless of the frequenecy you are tuned to, you are seeing a DC offset (or component or bias). The term "DC" comes from "Direct Current" in electronics. It is the unchanging aspect of a signal as opposed to the "alternating" part of the signal (AC) that changes over time. + +.. figure:: ../images/dc_spike_grc.png + :align: center + + DC spike + + +Take, for example, the signal represented by the digital sequence: .. code-block:: sh -2, -1, 1, 6, 8, 9, 8, 6, 1, -1, -2, -1, 1, 6, 8, 9, 8, 6, 1, -1, -2, -1, 1, 6, 8, 9, 8, 6, 1, -1 -This periodic signal contains a strong sinusoidal component spanning from -2 to 9. If you were to plot the spectrum of this signal, you would see one spike at the frequency of this sinusoid and a second spike at 0 Hz (DC). If the signal spanned from values -2 to 2 (centered around zero), there would be no DC offset. Since it is centered around 3.5 (the number midway between -2 and 9), there is a DC component. +.. figure:: ../images/dc_spike_example_plot.png + :align: center + + Example signal + +This periodic signal contains a strong sinusoidal component spanning from -2 to 9. If we plot the spectrum of this signal, you can see one spike at the frequency of this sinusoid and a second spike at 0 Hz (DC). + + +.. figure:: ../images/dc_spike_example_spectrum.png + :align: center + + Spectrum of example signal + +If the signal spanned from values -2 to 2 (centered around zero), there would be no DC offset. Since it is centered around 3.5 (the number midway between -2 and 9), there is a DC component. Samples produced by HackRF are measurements of radio waveforms, but the measurement method is prone to a DC bias introduced by HackRF. It's an artifact of the measurement system, not an indication of a received radio signal. DC offset is not unique to HackRF; it is common to all quadrature sampling systems. From 980bb9c548f0a8d2345879ecde43a1d09730c2ea Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 11:18:37 +0000 Subject: [PATCH 10/11] docs: remove mention of a very old DC spike bug At this point it's more likely to confuse things than help --- docs/source/troubleshooting.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index 9ac0a33d..e84e95a7 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -40,8 +40,6 @@ If the signal spanned from values -2 to 2 (centered around zero), there would be Samples produced by HackRF are measurements of radio waveforms, but the measurement method is prone to a DC bias introduced by HackRF. It's an artifact of the measurement system, not an indication of a received radio signal. DC offset is not unique to HackRF; it is common to all quadrature sampling systems. -There was a bug in the HackRF firmware (through release 2013.06.1) that made the DC offset worse than it should have been. In the worst cases, certain Jawbreakers experienced a DC offset that drifted to a great extreme over several seconds of operation. This bug has been fixed. The fix reduces DC offset but does not do away with it entirely. It is something you have to live with when using any quadrature sampling system like HackRF. - A high DC offset is also one of a few symptoms that can be caused by a software version mismatch. A common problem is that people run an old version of gr-osmosdr with newer firmware. Solution From 17b641d776c0f39feb1b5f6c9f9bff2998df5a1a Mon Sep 17 00:00:00 2001 From: Mike Walters Date: Tue, 25 Mar 2025 13:07:11 +0000 Subject: [PATCH 11/11] docs: add troubleshooting section for no boards found --- docs/source/troubleshooting.rst | 20 ++++++++++++++++++++ docs/source/updating_firmware.rst | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index e84e95a7..de106d59 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -4,6 +4,26 @@ Troubleshooting ================================================ +HackRF not detected / "No HackRF boards found." +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the software you're using is unable to detect the HackRF hardware and/or `hackrf_info` returns "No HackRF boards found.", this can be caused by a number of different software or hardware issues. + +Solution +-------- + + #. If you are using a PortaPack addon, make sure to select "HackRF" mode from the main menu. + + #. If you are using a virtual machine or Windows Subsystem for Linux (WSL), make sure that it is configured to pass through the USB device. + + #. Check whether the device appears in ``lsusb`` (Linux), Device Manager (Windows), or System Report (macOS). If it doesn't not appear, it could either be a firmware issue, an issue with the cable, or another hardware issue. + + #. Try booting the HackRF in DFU mode by holding the "DFU" button when plugging in the device. It should now appear as `NXP Semiconductors LPC4330FET180 [ARM Cortex M4 + M0] (device firmware upgrade mode)` in the locations listed above. If it does appear, then it was likely a firmware issue and you can follow the instructions to :ref:`recover the SPI flash firmware `. + + #. If the device does not appear in DFU mode then it is likely to be an issue with the USB cable. Charge-only cables (which do not include the data lines) have become very common and will cause this symptom. Ideally, test the cable you're using with another device that does some sort of data transfer to be sure that it works, or just try other cables. + + #. If the device still does not appear, it may be a less common issue or possibly a fault with the hardware. See :doc:`Getting Help ` for information on where to ask for more support, and please include as much detail as you can about what you've already tried. + .. _bigspike: There is a big spike in the center of the received spectrum diff --git a/docs/source/updating_firmware.rst b/docs/source/updating_firmware.rst index f8e7fbb9..a7b74eb4 100644 --- a/docs/source/updating_firmware.rst +++ b/docs/source/updating_firmware.rst @@ -29,7 +29,7 @@ After writing the firmware to SPI flash, you may need to reset the HackRF device If you get an error that mentions HACKRF_ERROR_NOT_FOUND, it is often a permissions problem on your OS. - +.. _recovering_firmware: Only if Necessary: Recovering the SPI Flash Firmware ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~