<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Managing your Modems Since 2007</title>
	<atom:link href="https://ioncontrol.co/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://ioncontrol.co/blog</link>
	<description></description>
	<lastBuildDate>Wed, 03 Jun 2026 14:58:49 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://ioncontrol.co/blog/wp-content/uploads/2025/06/logo-150x150.png</url>
	<title>Managing your Modems Since 2007</title>
	<link>https://ioncontrol.co/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Your Alcatel-Lucent 9926 BBUv2 eNodeB Wants an Update</title>
		<link>https://ioncontrol.co/blog/2026/06/03/your-alcatel-lucent-9926-bbuv2-enodeb-wants-an-update/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 04:51:46 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[LTE]]></category>
		<guid isPermaLink="false">https://ioncontrol.co/blog/?p=220</guid>

					<description><![CDATA[So you pull out your 9926 BBUv2, boot it up, and remember it&#8217;s only running LR16.1.L MNCL3. That&#8217;s so 2018. You really want to run mid-2019&#8217;s MNCL4 drop instead. It&#8217;s newer. Fresher. Nicer. There&#8217;s only one way to fix this&#8230; Run NEM You&#8217;ve got the latest Network Element Manager (NEM) installed on your Linux machine. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="283" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-1024x283.jpeg" alt="" class="wp-image-221" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-1024x283.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-300x83.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-768x213.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-1536x425.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/IMG_7232-2048x567.jpeg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">So you pull out your 9926 BBUv2, boot it up, and remember it&#8217;s only running LR16.1.L MNCL3. That&#8217;s so 2018. You really want to run mid-2019&#8217;s MNCL4 drop instead. It&#8217;s newer. Fresher. <em>Nicer</em>.</p>



<p class="wp-block-paragraph">There&#8217;s only one way to fix this&#8230;</p>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">Run NEM</h3>



<p class="wp-block-paragraph">You&#8217;ve got the latest Network Element Manager (NEM) installed on your Linux machine. It&#8217;s not a Linux app (it&#8217;s Java) but you&#8217;ve got WINE and that works just fine. The only annoying thing is that you need to type a lot of stuff to start it because [reasons], but that&#8217;s a problem for another day.</p>



<pre class="wp-block-code has-small-font-size"><code>$ wine ~/.wine/drive_c/users/dcbw/Start\ Menu/Programs/Nokia/NEM/NEM.LR17.1_D1.11.lnk</code></pre>



<p class="wp-block-paragraph">You remind yourself that WINE is pretty great because it can run all kinds of old enterprise stuff, but before you finish the thought up pops NEM&#8217;s login window.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="692" height="419" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-login.png" alt="" class="wp-image-222" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-login.png 692w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-login-300x182.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></figure>



<p class="wp-block-paragraph">You type in the standard Alcatel-Lucent eNodeB username and password in all three boxes. It complains if any boxes are empty and you don&#8217;t want to make it angry.</p>



<pre class="wp-block-code has-small-font-size"><code>initial_nem / Vq,A=V8o;#</code></pre>



<p class="wp-block-paragraph"><br>Up pops the main window, but you can&#8217;t do anything for half a minute while NEM reads the BBU&#8217;s configuration. Eventually it&#8217;s done &#8220;reading documents&#8221; and &#8220;opening channels&#8221;.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="781" height="569" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-main.png" alt="" class="wp-image-223" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-main.png 781w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-main-300x219.png 300w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-main-768x560.png 768w" sizes="(max-width: 781px) 100vw, 781px" /></figure>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading">That&#8217;s a Lot of #</h3>



<p class="wp-block-paragraph">Flipping to the <code>SW Properties</code> tab you double-check versions to see what old thing you&#8217;ll be overwriting on the passive partition.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="624" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-1024x624.png" alt="" class="wp-image-224" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-1024x624.png 1024w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-300x183.png 300w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-768x468.png 768w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab.png 1210w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ugh. 2017 is even worse than 2018. Goodbye FL1, to the curb you go. Hello MNCL4, shiny freshness, and sweet sweet 2019. Let&#8217;s do this.</p>



<p class="wp-block-paragraph">But you can&#8217;t do anything until you allocate configuration rights. You thought you had all the power but NEM reminds you that you&#8217;re still mortal. For now.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="341" height="502" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-config-rights.png" alt="" class="wp-image-225" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-config-rights.png 341w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-config-rights-204x300.png 204w" sizes="auto, (max-width: 341px) 100vw, 341px" /></figure>



<p class="wp-block-paragraph">That&#8217;s better, now the <code>SW Replacement</code> button is enabled and the world is yours. So hit that button already! But wait, this part actually requires some terminal work, not just a Java GUI app. You need to copy MNCL4 to a place where the 9926 can find it with SFTP. Don&#8217;t worry; it&#8217;s a Linux system. You know this!</p>



<pre class="wp-block-code has-small-font-size"><code>$ mkdir /home/rbs/alcatel/ENB_LR1601_D0305_E00771
$ cp ENB_LR1601_D0305_E00771.srs.tar.gz /home/rbs/alcatel/ENB_LR1601_D0305_E00771
$ cd /home/rbs/alcatel/ENB_LR1601_D0305_E00771
$ tar -xvf ENB_LR1601_D0305_E00771.srs.tar.gz
$ systemctl start sshd</code></pre>



<p class="wp-block-paragraph">Yes! It worked! You log into your local machine&#8217;s SFTP server from the chooser dialog and navigate to the SDF file. You select it, pour one out for FL1, and hit <code>OK</code>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="821" height="548" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-select.png" alt="" class="wp-image-227" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-select.png 821w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-select-300x200.png 300w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-select-768x513.png 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<p class="wp-block-paragraph">It begins. The BBU reads the file list from the SDF file and begins sucking down the update.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="615" height="736" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-dload.png" alt="" class="wp-image-228" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-dload.png 615w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-dload-251x300.png 251w" sizes="auto, (max-width: 615px) 100vw, 615px" /></figure>



<p class="wp-block-paragraph">Now&#8217;s a good time to get a drink, you tell yourself. Maybe some water. Or coffee? In any case it&#8217;ll take a while. You get back with your coffee and it&#8217;s still not done loading. You SSH in and poke around.</p>



<pre class="wp-block-code has-small-font-size"><code>SDCXM-SDCAM-1-root-enbodev> ps aux | grep dpkg
root 29454 0.0 0.0 2700 948 pts/0 R+ 19:55 0:00 /bin/dpkg --admindir=/ffs1/config/db -1 /data/sw/#BI_0850#FT_OMsw#FI_bcam2#FV_000017D8/uecallp.sdcam.deb
SDCXM-SDCAM-1-root-enbodev></code></pre>



<p class="wp-block-paragraph">Yep, it&#8217;s still doing stuff. Just Wait Longer. Finally NEM updates, shows the install is complete, and the BBU is rebooting. Just Wait Longer. The BBU comes back up, NEM reconnects, and you verify the load worked as intended.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="622" src="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-updated-1024x622.png" alt="" class="wp-image-229" srcset="https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-updated-1024x622.png 1024w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-updated-300x182.png 300w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-updated-768x466.png 768w, https://ioncontrol.co/blog/wp-content/uploads/2026/06/nem-sw-tab-updated.png 1212w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">It did. MNCL4 success! You&#8217;ve reached peak Alcatel-Lucent eNodeB; gone as far as you can go. Take the time to enjoy it. Happy LTE-ing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Base Station Boot Logs</title>
		<link>https://ioncontrol.co/blog/2026/05/23/small-cell-boot-logs/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Sat, 23 May 2026 03:31:34 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[LTE]]></category>
		<guid isPermaLink="false">https://ioncontrol.co/blog/?p=89</guid>

					<description><![CDATA[A periodically updated collection of small (and not-so-small) cell boot logs captured via UART or on-device. Small Cells Airspan AirVelocity 1000 LTE Airspan AirVelocity 1901 (PIDAV1901) 5G Baicells Nova 227 (2AG32PBS212096N) LTE Baicells Nova 430i (2AG32PBS3101S) LTE Cell Bounce (2AUQ4-CB34U) UMTS Gemtek WLTGFC-105 (MXF-WLTGFC105) LTE Nokia Flexi Zone Indoor Pico BTS FWFF LTE Nokia Flexi [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A periodically updated collection of small (and not-so-small) cell boot logs captured via UART or on-device.</p>



<p class="wp-block-paragraph"><strong>Small Cells</strong></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/av1000.txt">Airspan AirVelocity 1000 LTE</a></p>



<p class="has-text-align-left wp-block-paragraph"><a style="caret-color: rgb(0, 0, 0); white-space: normal; font-family: var(--wp--preset--font-family--body); font-size: var(--wp--preset--font-size--medium);" href="https://ioncontrol.co/bootlogs/pidav1901.txt">Airspan AirVelocity 1901 (PIDAV1901) 5G</a></p>



<p class="has-text-align-left wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/2AG32PBS212096N.txt">Baicells Nova 227 (2AG32PBS212096N) LTE</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/baicells-nova-430i-boot.txt">Baicells Nova 430i (2AG32PBS3101S) LTE</a></p>



<p class="has-text-align-left wp-block-paragraph"><a style="font-size: 16.799999px;" href="https://ioncontrol.co/bootlogs/2auq4-cb34u.txt">Cell Bounce (2AUQ4-CB34U) UMTS</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/wltgfc105.txt">Gemtek WLTGFC-105 (MXF-WLTGFC105) LTE</a></p>



<p class="has-text-align-left wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/nokia-fwff.txt">Nokia Flexi Zone Indoor Pico BTS FWFF LTE</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/nokia-fw2ira.txt">Nokia Flexi Zone Multiband Indoor Pico BTS FW2IRA LTE</a></p>



<p class="has-text-align-left wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/qhy-s1000c-lte.txt">Sprint Airave 3 (QHY-S1000C) LTE board</a></p>



<p class="has-text-align-left wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/qhy-s1000c-cdma.txt">Sprint Airave 3 (QHY-S1000C) CDMA board</a></p>



<div style="height:22px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph"><strong>Macro eNodeBs/gNodeBs</strong></p>



<p class="wp-block-paragraph">Alcatel-Lucent 9926 bCAM2 LTE control/modem module <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcam2-soca.txt">[SoC A]</a> <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcam2-socb.txt">[SoC B]</a> <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcam2-socc.txt">[SoC C]</a></p>



<p class="wp-block-paragraph">Alcatel-Lucent 9926 bCEM2 LTE modem module <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcem2-soca.txt">[SoC A]</a> <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcem2-socb.txt">[SoC B]</a> <a href="http://ioncontrol.co/bootlogs/alcatel-lucent-9926-bcem2-socc.txt">[SoC C]</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/alcatel-lucent-9926-eccm2-boot.txt">Alcatel-Lucent 9926 eCCM2 UMTS/LTE control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/alcatel-lucent-9926-eccm-boot.txt">Alcatel-Lucent 9926 eCCM UMTS/LTE control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/alcatel-lucent-9926-ecem-boot.txt">Alcatel-Lucent 9926 eCEM UMTS/LTE modem module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/nokia-asil-sbts25r2.txt">Nokia AirScale ASIL GSM/UMTS/LTE/5G control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/nokia-asik-sbts25r2.txt">Nokia AirScale ASIK 5G control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/nokia-asia-sbts25r2.txt">Nokia AirScale ASIA GSM/UMTS/LTE control module</a></p>



<p class="wp-block-paragraph"><a href="http://ioncontrol.co/bootlogs/nokia-asib-sbts25r2.txt">Nokia AirScale ASIB GSM/UMTS/LTE/5G control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/samsung-lmd1-j1a-boot.txt">Samsung CDU30 LMD1-J1A LTE control module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/samsung-lcc4-b1a-boot.txt">Samsung CDU30 LCC4-B1A LTE baseband module</a></p>



<p class="wp-block-paragraph"><a href="https://ioncontrol.co/bootlogs/samsung-gcb1-c1a-boot.txt">Samsung GCB1-C1A LTE/5G baseband module</a></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Base Station Specifications</title>
		<link>https://ioncontrol.co/blog/2026/05/23/base-station-properties/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Sat, 23 May 2026 00:34:17 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[LTE]]></category>
		<guid isPermaLink="false">https://ioncontrol.co/blog/?p=141</guid>

					<description><![CDATA[A table of various cellular base station specifications. Vendor Name RAT CPU Cores Speed Memory Nokia ASIB GSMUMTSLTENR Intel Xeon D-1548 8/16 2.0 GHz 8GB Nokia ASIL GSMUMTSLTENR Intel Atom P5952 20/20 2.2 GHz 16GB Nokia ASIK NR Intel Xeon D-1548 8/16 2.0 GHz 16GB Nokia ASIA GSMUMTSLTE AvagoAxxiaAXM5516 16/16 1.6GHz 6GB Samsung LMD1LCC4 UMTSLTE [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A table of various cellular base station specifications.</p>



<figure class="wp-block-table"><table><thead><tr><th>Vendor</th><th>Name</th><th>RAT</th><th>CPU</th><th>Cores</th><th>Speed</th><th>Memory</th></tr></thead><tbody><tr><td>Nokia</td><td>ASIB</td><td>GSM<br>UMTS<br>LTE<br>NR</td><td>Intel Xeon D-1548</td><td>8/16</td><td>2.0 GHz</td><td>8GB</td></tr><tr><td>Nokia</td><td>ASIL</td><td>GSM<br>UMTS<br>LTE<br>NR</td><td>Intel Atom P5952</td><td>20/20</td><td>2.2 GHz</td><td>16GB</td></tr><tr><td>Nokia</td><td>ASIK</td><td>NR</td><td>Intel Xeon D-1548</td><td>8/16</td><td>2.0 GHz</td><td>16GB</td></tr><tr><td>Nokia</td><td>ASIA</td><td>GSM<br>UMTS<br>LTE</td><td>Avago<br>Axxia<br>AXM5516</td><td>16/16</td><td>1.6<br>GHz</td><td>6GB</td></tr><tr><td>Samsung</td><td>LMD1<br>LCC4</td><td>UMTS<br>LTE</td><td>Cavium OCTEON CNF7560</td><td>16/16</td><td>1.6<br>GHz</td><td>4GB (LMD1)<br>2GB (LCC4)</td></tr><tr><td>Samsung</td><td>GCB1</td><td>LTE<br>NR</td><td>Marvell<br>OCTEON TX2<br>CN9670</td><td>24/24</td><td>1.8GHz</td><td>16GB</td></tr><tr><td>Alcatel-Lucent</td><td>bCAM2<br>bCEM2</td><td>UMTS<br>LTE</td><td>Freescale B4860E</td><td>4/8 x 3</td><td>1.6 GHz</td><td>2GB x 3 (bCAM2)<br>2GB x 3 (bCEM2)</td></tr><tr><td>Alcatel-Lucent</td><td>eCCM2<br>bCEM</td><td>UMTS<br>LTE</td><td>Freescale P4080</td><td>8/8</td><td>1.5 GHz</td><td>4GB (eCCM2)<br>2GB (bCEM)</td></tr><tr><td>Alcatel-Lucent</td><td>eCCM<br>eCEM</td><td>UMTS<br>LTE</td><td>Freescale M8548E (eCCM)<br>Freescale M8377E (eCEM)</td><td>1/1</td><td>1.5 GHz (eCCM)<br>600 MHz (eCEM)</td><td>2GB (eCCM)<br>256MB (eCEM)</td></tr><tr><td>Airspan</td><td>AirVelocity 1000</td><td>LTE</td><td>Qualcomm FSM9900</td><td>4/4</td><td></td><td>2GB</td></tr><tr><td>Airspan</td><td>AirVelocity 1901</td><td>NR</td><td>Intel Atom C3808</td><td>12/12</td><td>2.0 GHZ</td><td>32GB</td></tr><tr><td>Baicells</td><td>Nova 430i</td><td>LTE</td><td>Qualcomm FSM9900</td><td>4/4</td><td></td><td>3GB</td></tr><tr><td>Gemtek</td><td>WLTGFC-105</td><td>LTE</td><td>Cavium OCTEON CNF71xx</td><td>4/4</td><td>1.6 GHz</td><td>512MB</td></tr><tr><td>Nokia</td><td>Flexi Zone Pico FWFF</td><td>UMTS<br>LTE</td><td>TI TCI6638K2K &#8220;Keystone 2 Kepler&#8221;</td><td>4/4</td><td></td><td>2.5GB</td></tr><tr><td>Nokia</td><td>Flexi Zone Multiband Pico FW2IRA</td><td>LTE</td><td>TI TCI6638K2K &#8220;Keystone 2 Kepler&#8221;</td><td>4/4</td><td></td><td>2.5GB</td></tr><tr><td>Airvana</td><td>AirRave 3 LTE</td><td>LTE</td><td>Qualcomm FSM 9900</td><td>4/4</td><td></td><td>1GB</td></tr><tr><td>Airvana</td><td>AirRave 3 CDMA</td><td>CDMA<br>EVDO</td><td>Freescale PSC9131E</td><td>1/1</td><td></td><td>512MB</td></tr><tr><td>Cellbounce</td><td>Cellbounce</td><td>UMTS</td><td>Qualcomm FSM9208</td><td>1/1</td><td>883 Mhz</td><td>256MB</td></tr><tr><td>Ericsson</td><td>DUW 30 01<br>(KDU 127 161/3)</td><td>UMTS</td><td>Wintegra WIN547W3</td><td>1/1</td><td>250 MHz</td><td>128MB</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Make a Pluggable USB3-HUB7BC always-on</title>
		<link>https://ioncontrol.co/blog/2025/12/26/make-a-pluggable-usb3-hub7bc-always-on/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Fri, 26 Dec 2025 15:15:28 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ModemManager]]></category>
		<guid isPermaLink="false">https://ioncontrol.co/blog/?p=78</guid>

					<description><![CDATA[The Pluggable USB3-HUB7BC is an older USB3 hub with a special property: all seven ports are software controllable with uhubctl. It&#8217;s been replaced by a USB-C version that has fewer controllable ports, but you can still find the OG on eBay. Controllable ports are critical for modem testing to ensure only one of multiple attached [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The <a href="https://plugable.com/products/usb3-hub7bc/">Pluggable USB3-HUB7BC</a> is an older USB3 hub with a special property: all seven ports are software controllable with <a href="https://github.com/mvp/uhubctl">uhubctl</a>. It&#8217;s been replaced by a USB-C version that has fewer controllable ports, but you can still find the OG on eBay. Controllable ports are critical for modem testing to ensure only one of multiple attached modems is active at a time.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="452" src="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-1024x452.jpeg" alt="" class="wp-image-79" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-1024x452.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-300x133.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-768x339.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-1536x679.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6520-2048x905.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Unfortunately the hub is powered on by a momentary push-button, but it&#8217;ll be stuck inside an RF shield box and externally power-controlled with a Synaccess IP managed power strip. There is <a href="https://support.plugable.com/t/hub-always-on-mode-is-it-possible/17022/2">no non-physical way</a> to turn the hub on when first powered. Can we change that?</p>



<p class="wp-block-paragraph">Yes we can.</p>



<h4 class="wp-block-heading"><strong>Open it Up</strong></h4>



<p class="wp-block-paragraph">Taking off the four rubber feet reveals four Phillips screws.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="626" src="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-1024x626.jpeg" alt="" class="wp-image-80" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-1024x626.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-300x183.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-768x470.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-1536x939.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6515-2048x1253.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Removing those lets the bottom come off, revealing the PCB, which easily comes out of the case with a small tilt and a tug.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-1024x684.jpeg" alt="" class="wp-image-81" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-1024x684.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-300x201.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-768x513.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-1536x1027.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/board-2048x1369.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I&#8217;ve circled the power switch I need to bypass, so let&#8217;s flip over the board and use a multimeter to figure out whether the switch is normally open (NO) or normally closed (NC) and what pins I need to solder together.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="714" src="https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-1024x714.jpeg" alt="" class="wp-image-82" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-1024x714.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-300x209.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-768x535.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-1536x1071.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/flipped-board-2048x1428.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading"><strong>Solder Time</strong></h4>



<p class="wp-block-paragraph">Turns out it&#8217;s very simple; the switch is normally open (NO) and pressing the power button continuously doesn&#8217;t seem to put the switch into any kind of debug, reset, or firmware download mode. I just need to connect these two pins together and the hub will automatically turn on every time power is connected.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="732" src="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-1024x732.jpeg" alt="" class="wp-image-83" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-1024x732.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-300x215.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-768x549.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-1536x1098.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/12/IMG_6518-2048x1464.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Ugly solder job for sure, but it works.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nokia FW2IRA -&gt; ?</title>
		<link>https://ioncontrol.co/blog/2025/11/13/nokia-fw2ira/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Thu, 13 Nov 2025 03:22:12 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[LTE]]></category>
		<category><![CDATA[ModemManager]]></category>
		<guid isPermaLink="false">https://ioncontrol.co/blog/?p=62</guid>

					<description><![CDATA[Today I&#8217;m converting my Nokia Flexi Zone Multiband Indoor Pico BTS model FW2IRA to use external antennas. It&#8217;s a 2&#215;2 LTE band 66+46 eNodeB about the size of a couple dinner plates stacked up. I need external antennas because, like my previous conversion of a Nokia FWFF, I&#8217;m going to pipe the radios into a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="637" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-1024x637.jpeg" alt="Nokia FW2IRA Pico BTS" class="wp-image-65" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-1024x637.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-300x187.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-768x478.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-1536x955.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6289-2048x1274.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Today I&#8217;m converting my Nokia Flexi Zone Multiband Indoor Pico BTS model FW2IRA to use external antennas. It&#8217;s a 2&#215;2 LTE band 66+46 eNodeB about the size of a couple dinner plates stacked up. I need external antennas because, like my <a href="https://ioncontrol.co/blog/2025/09/09/fwff-fwfg-lets-add-external-antennas-to-a-nokia-flexi-pico-bts/">previous conversion</a> of a Nokia FWFF, I&#8217;m going to pipe the radios into a Willtek RF Shield so I don&#8217;t make mobile carriers angry.</p>



<p class="wp-block-paragraph">The Multiband part of the name (and the &#8220;2&#8221; part of the model number) indicate these are second generation Nokia LTE Pico BTSs which support two LTE bands each. The first generation (<a href="https://ioncontrol.co/blog/2025/09/09/fwff-fwfg-lets-add-external-antennas-to-a-nokia-flexi-pico-bts/">like the FWFF</a>) only supports a single band.</p>



<p class="wp-block-paragraph">Here I&#8217;m starting with the top of the unit off, looking at the four antennas that I&#8217;m going to remove.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="914" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-1024x914.jpeg" alt="Nokia FW2IRA with top case removed, looking at the four integrated antennas." class="wp-image-64" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-1024x914.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-300x268.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-768x685.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-1536x1371.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6088-2048x1828.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The antennas themselves just screw into the huge heatsink, but unfortunately to disconnect their cables we have remove the heatsink because the connectors are far underneath:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="550" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-1024x550.jpeg" alt="Antenna connector far underneath the huge heatsink." class="wp-image-66" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-1024x550.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-300x161.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-768x413.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-1536x825.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6291-2048x1100.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">While I&#8217;ve got the heatsink removed, let&#8217;s take a look inside.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="544" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-1024x544.jpeg" alt="Main board, RF cards, and huge heatsink of the FW2IRA." class="wp-image-67" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-1024x544.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-300x159.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-768x408.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-1536x816.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6293-2048x1088.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Immediately you can see a huge CPU, another big chip that&#8217;s probably an ASIC, a Lattice FPGA, a bunch of DDR3, and two RF cards. Nokia Flexi Zone Picos support a huge number of bands and to manage that the base BTS is the same but the RF cards are changed to support each frequency combination.</p>



<p class="wp-block-paragraph">Now that I have access to the antenna connectors, I&#8217;m going to snap in the SMA pigtails.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="375" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-1024x375.jpeg" alt="SMA pigtails added in place of the old antennas." class="wp-image-68" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-1024x375.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-300x110.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-768x282.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-1536x563.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6294-2048x751.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">And then screw the heatsink back on and route the pigtails around it:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="675" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-1024x675.jpeg" alt="SMA pigtails routed around the re-installed heatsink." class="wp-image-69" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-1024x675.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-300x198.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-768x506.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-1536x1012.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6295-2048x1350.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Next I drilled four holes in the corners of the top case for the SMA connectors to screw into:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1010" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-1010x1024.jpeg" alt="Hole drilled in top case for SMA connector." class="wp-image-70" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-1010x1024.jpeg 1010w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-296x300.jpeg 296w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-768x779.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-1515x1536.jpeg 1515w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6296-2020x2048.jpeg 2020w" sizes="auto, (max-width: 1010px) 100vw, 1010px" /></figure>



<p class="wp-block-paragraph">And repeat a couple more times&#8230;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="671" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-1024x671.jpeg" alt="Two more holes drilled in the top cover for SMA connectors." class="wp-image-71" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-1024x671.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-300x197.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-768x503.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-1536x1007.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6299-2048x1343.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I tightened up the SMA connectors on the outside:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1014" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-1024x1014.jpeg" alt="Using a pliers to tighten the nut around the SMA connector to keep it in place." class="wp-image-72" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-1024x1014.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-300x297.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-150x150.jpeg 150w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-768x760.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-1536x1520.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6300-2048x2027.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">And now I have four external antenna connectors on the FW2IRA. It&#8217;s definitely not as elegant as the pre-existing SMA connector holes on the FWFF but it&#8217;ll work.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="622" src="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-1024x622.jpeg" alt="Finished project with four SMA connectors installed through two corners of the base station's top cover." class="wp-image-73" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-1024x622.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-300x182.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-768x467.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-1536x933.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/11/IMG_6302-2048x1244.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A GPS-synced NTP Server for Small Cells</title>
		<link>https://ioncontrol.co/blog/2025/10/05/a-gps-synced-ntp-server-for-small-cells/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 11:36:21 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[LTE]]></category>
		<category><![CDATA[ModemManager]]></category>
		<guid isPermaLink="false">http://ioncontrol.co/blog/?p=35</guid>

					<description><![CDATA[Base stations need accurate time for framing and synchronization; they&#8217;ll often have GPS antenna ports and provide options for NTP or PTP clock sync. But what if you have a couple base stations and you don&#8217;t want all those GPS antennas hanging near the window? You get a GPS receiver and feed it to an [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Base stations need accurate time for framing and synchronization; they&#8217;ll often have GPS antenna ports and provide options for NTP or PTP clock sync. But what if you have a couple base stations and you don&#8217;t want all those GPS antennas hanging near the window?</p>



<p class="wp-block-paragraph">You get a GPS receiver and feed it to an NTP server, that&#8217;s what. Let&#8217;s do it.</p>



<h4 class="wp-block-heading"><strong>GPS Receiver</strong></h4>



<p class="wp-block-paragraph">The most important choice is which GPS receiver. You want one that provides &#8220;Pulse Per Second&#8221; (PPS) so the time server knows when each second actually starts and can compensate for latency or jitter. That significantly limits your options, but aside from overbuilt marine units like the Garmin 16x you can usually find cheap <a href="https://www.u-blox.com/">u-blox</a> modules like the 7M, M8, or F9. My advice: look at pictures of the board and make sure something says &#8220;PPS&#8221; before you buy it.</p>



<p class="wp-block-paragraph">I&#8217;m going to use USB because the <a href="https://www8.hp.com/h20195/v2/GetPDF.aspx/c06040430.pdf">HP EliteDesk 800 G4 mini</a> that will be my NTP server doesn&#8217;t have a serial port and if I added a serial port then I couldn&#8217;t have two NICs. And while USB PPS is less accurate than serial-based PPS, that doesn&#8217;t really matter for my application.</p>



<p class="wp-block-paragraph">I looked hard for an off-the-shelf USB GPS unit that had PPS capability via USB but those either don&#8217;t exist or are hard to find. So I chose a u-blox NEO-7M based board with a clearly marked PPS pin next to the TX/RX pins. Plus it had an external antenna connector (not shown below, but present at J1 as shipped).</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="572" height="543" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/Image.jpeg" alt="uBlox NEO-7M GPS board" class="wp-image-37" style="width:438px;height:auto" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/Image.jpeg 572w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/Image-300x285.jpeg 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></figure>



<p class="wp-block-paragraph">The board has a USB-C port already and I hoped the PPS signal would be connected there so I wouldn&#8217;t have to buy an RS-232/USB converter. Spoiler alert: it isn&#8217;t. This is quite silly. So we need a USB serial cable too.</p>



<h4 class="wp-block-heading"><strong>The USB Serial Cable</strong></h4>



<p class="wp-block-paragraph">The PPS signal usually arrives on the host as one of the RS-232 signals like DCD or RI or CTS. So I need a cable that exposes those signals and can just connect to my GPS board&#8217;s serial pins. I found an <a href="https://ftdichip.com/products/c232hd-ddhsp-0/">FTDI C232HD-DDHSP-0</a> with all the required signals broken out.</p>



<p class="wp-block-paragraph">Since it&#8217;s gotta look nice everything is going into a small project box, which means I need to drill a hole for the USB serial cable and its cord grip.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="712" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-712x1024.jpeg" alt="Drilling a hole in the project box for the USB serial cable cord grip" class="wp-image-38" style="width:397px;height:auto" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-712x1024.jpeg 712w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-208x300.jpeg 208w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-768x1105.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-1068x1536.jpeg 1068w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-1423x2048.jpeg 1423w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6099-scaled.jpeg 1779w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="506" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-1024x506.jpeg" alt="Cord grip installed in the project box" class="wp-image-39" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-1024x506.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-300x148.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-768x379.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-1536x759.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6100-2048x1012.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">On to the antenna; it&#8217;s just a male SMA to female SMA bulkhead cable:</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="751" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-1024x751.jpeg" alt="Everything in the project box with the antenna connector" class="wp-image-40" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-1024x751.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-300x220.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-768x563.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-1536x1126.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6105-2048x1501.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Time to hook up the board&#8230; I connected the cable RX to the board&#8217;s TXD, cable TX to board&#8217;s RXD, and VCC and GND.</p>



<p class="wp-block-paragraph">What about PPS? I first tried the Ring Indicator (RI) signal and could not get PPS to be recognized by gpsd, while ppscheck worked fine. It turns out gpsd doesn&#8217;t read the serial signals directly but tries to use the kernel&#8217;s pps_ldisc driver which only supports DCD. Lame.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="907" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-907x1024.jpeg" alt="Serial cable connected to the GPS board" class="wp-image-41" style="width:489px;height:auto" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-907x1024.jpeg 907w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-266x300.jpeg 266w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-768x867.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-1360x1536.jpeg 1360w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6107-1814x2048.jpeg 1814w" sizes="auto, (max-width: 907px) 100vw, 907px" /></figure>



<h4 class="wp-block-heading"><strong>Everything Else</strong></h4>



<p class="wp-block-paragraph">With the board hooked up and tested I added two mounting brackets and insulated the inside with hot glue.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="801" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-801x1024.jpeg" alt="GPS board fit into the case with hot glue covering the nuts holding the external brackets in place." class="wp-image-42" style="width:548px;height:auto" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-801x1024.jpeg 801w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-235x300.jpeg 235w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-768x982.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-1201x1536.jpeg 1201w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-1601x2048.jpeg 1601w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6110-scaled.jpeg 2001w" sizes="auto, (max-width: 801px) 100vw, 801px" /></figure>



<p class="wp-block-paragraph">Screw on the top, and we&#8217;re ready to set up the software side of things.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="740" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-1024x740.jpeg" alt="The finished GPS box with the USB serial cable." class="wp-image-43" style="width:548px;height:auto" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-1024x740.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-300x217.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-768x555.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-1536x1111.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6111-2048x1481.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading"><strong>Double-check</strong></h4>



<p class="wp-block-paragraph">It&#8217;s worth running <code>gpsmon /dev/ttyUSB0</code> to ensure everything (including PPS) is working before getting <code>gpsd</code> running. It should look something like this:</p>



<pre class="wp-block-code alignwide has-small-font-size" style="border-style:none;border-width:0px"><code><code>┌──────────────────────────────────────────────────────────────────────────────┐
│Time: 2025-09-26T01:57:18.000Z   Lat: YY ZZ.046970' N   Lon:  ZZ XX.045530' W │
└───────────────────────────────── Cooked TPV ─────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐
│ GPRMC GPVTG GPGGA GPGSA GPGSV GPGLL                                          │
└───────────────────────────────── Sentences ──────────────────────────────────┘
┌───────────────────────┌─────────────────────────┌────────────────────────────┐
│ SVID  PRN  Az El SN HU│Time:     015718.00	  │Time:      015718.00        │
│GP  2    2 101 30 26  Y│Latitude:   XXXX.04697 N │Latitude:  XXXX.04697       │
│GP  7    7 113 81 29  Y│Longitude: YYYYY.04553 W │Longitude: YYYYY.04553      │
│GP  8    8  75 48 41  Y│Speed:    0.223          │Altitude:  267.9            │
│GP 27   27  22 17 33  Y│Course:                  │Quality:   1   Sats: 05     │
│GP 30   30 156 65 30  Y│Status:   A        FAA:A │HDOP:      2.42             │
│GP  9    9  67 15 25  N│MagVar:                  │Geoid:     -30.9            │
│                       └───────── RMC ───────────└─────────── GGA ────────────┘
│                       ┌─────────────────────────┌────────────────────────────┐
│                       │Mode: A3 Sats: 2 7 8 27 +│UTC:           RMS:         │
│                       │DOP H=2.42 V=3.44 P=4.21 │MAJ:           MIN:         │
│                       │TOFF: -1.280474680       │ORI:           LAT:         │
│                       │PPS: -1.412210534        │LON:           ALT:         │
└──────── GSV ──────────└────── GSA + PPS ────────└─────────── GST ────────────┘</code></code></pre>



<p class="wp-block-paragraph"><code>gpsmon</code> talks directly to the device so it will read PPS on more RS-232 control signals than the kernel&#8217;s PPS driver supports. Just something to watch out for in case <code>gpsmon</code> shows PPS but <code>gpsd</code> doesn&#8217;t.</p>



<h4 class="wp-block-heading"><strong>gpsd</strong></h4>



<p class="wp-block-paragraph">On the software side the GPS module is managed by <code>gpsd</code>, which autodetects vendor quirks and (as long as you&#8217;re using DCD for PPS) configures the kernel&#8217;s PPS device for you. </p>



<p class="wp-block-paragraph">My simple Fedora <code>gpsd</code> config gets written to <code>/etc/sysconfig/gpsd</code> but other distros use <code>/etc/default/gpsd</code>.</p>



<pre class="wp-block-code"><code># Options for gpsd, including serial devices
OPTIONS="-n"
DEVICES="/dev/ttyUSB0"
# Set to 'true' to add USB devices automatically via udev
USBAUTO="true"</code></pre>



<p class="wp-block-paragraph">Later I&#8217;ll be replacing the <code>/dev/ttyUSB0</code> device path with a more permanent one since there will eventually be 10+ modems connected and USB device names are notoriously unstable.</p>



<p class="wp-block-paragraph">Now I can start <code>gpsd</code>:</p>



<pre class="wp-block-code"><code>systemctl start gpsd</code></pre>



<p class="wp-block-paragraph">and double-check one last time by running <code>gpsmon</code> again, but this time without arguments since it will automatically use data from the running <code>gpsd</code>.</p>



<h4 class="wp-block-heading"><strong>chrony</strong></h4>



<p class="wp-block-paragraph">Now that I have GPS up and running it&#8217;s time for NTP, which was the whole point of this exercise. <code>gpsd</code> writes location and timing data from GPS receivers to a well-known Shared Memory (SHM) segment that other daemons like <code>ntpd</code> or <code>chrony</code> read. I&#8217;m going to use <code>chrony</code>.</p>



<p class="wp-block-paragraph">Here&#8217;s my minimal <code>/etc/chrony.conf</code>:</p>



<pre class="wp-block-code alignwide"><code># Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Allow NTP client access from local network.
allow all

# Serve time even if not synchronized to a time source.
local stratum 1

# Set the TAI-UTC offset of the system clock.
leapseclist /usr/share/zoneinfo/leap-seconds.list

# Specify directory for log files.
logdir /var/log/chrony

# Listen to gpsd for reference time
refclock SHM 0 refid GPS precision 1e-1 offset 0.0
refclock SHM 1 refid PPS precision 1e-7
</code></pre>



<p class="wp-block-paragraph">The important bits are the &#8220;<code>allow all</code>&#8220;, &#8220;<code>local stratum 1</code>&#8220;, and both &#8220;<code>refclock</code>&#8221; lines. The NTP server will be on an isolated network so I don&#8217;t care much about limiting access by source IP. The <code>local stratum 1</code> ensures that NTP clients see the server as high-precision (which it is!). The <code>refclock</code> lines are what tells <code>chrony</code> to get timing information from <code>gpsd</code> for both GPS time and PPS high precision adjustment. The <code>SHM 0</code> and <code>SHM 1</code> are <code>gpsd</code>&#8216;s predefined shared memory segments for GPS and PPS info, respectively. Eventually I&#8217;ll do some tests and figure out better timing offsets, but not today.</p>



<p class="wp-block-paragraph">Now I can start <code>chronyd</code>:</p>



<pre class="wp-block-code"><code>systemctl start chronyd</code></pre>



<p class="wp-block-paragraph">and double-check that it&#8217;s working and synced to GPS by running <code>chronyc sources</code> a couple times until it&#8217;s synced up:</p>



<pre class="wp-block-code alignwide"><code>$ chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
#x GPS                           0   4   177    14    +81ms&#91;  +81ms] +/-  100ms
#x PPS                           0   4   177    16    -35ms&#91;  -35ms] +/-   98us
</code></pre>



<p class="wp-block-paragraph">and finally double-check by sending an NTP request to the server:</p>



<pre class="wp-block-code alignwide"><code>$ ntpcheck utils ntpdate -s localhost

Server: localhost:123, Stratum: 1, Requests 3
Last Request:Offset: 0.000000s (0us) | Delay: 0.000058s (58us)
Correct Time is 2025-10-02 19:29:15.287043328 -0500 CDT

Average (3 requests):
Offset: 0.000015s (15us) | Delay: 0.000094s (94us)</code></pre>



<p class="wp-block-paragraph">And now I&#8217;m done! Time to point my base stations to this <code>chronyd</code>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FWFF-&gt;FWFG: Let&#8217;s add external antennas to a Nokia Flexi Zone Pico BTS</title>
		<link>https://ioncontrol.co/blog/2025/09/09/fwff-fwfg-lets-add-external-antennas-to-a-nokia-flexi-pico-bts/</link>
		
		<dc:creator><![CDATA[dan]]></dc:creator>
		<pubDate>Tue, 09 Sep 2025 16:26:01 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eNB]]></category>
		<category><![CDATA[LTE]]></category>
		<category><![CDATA[ModemManager]]></category>
		<guid isPermaLink="false">http://ioncontrol.co/blog/?p=19</guid>

					<description><![CDATA[I recently acquired a dirt-cheap Nokia Flexi Zone Pico BTS (model FWFF, LTE band 2) to use for ModemManager automated testing. The problem is that the FWFF has internal antennas, and since Band 2 is licensed spectrum one of the Big Three (Verizon, AT&#38;T, or T-Mobile) might get pretty angry with me. To solve that [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently acquired a dirt-cheap Nokia Flexi Zone Pico BTS (model FWFF, LTE band 2) to use for <a href="https://modemmanager.org">ModemManager</a> automated testing. The problem is that the FWFF has internal antennas, and since Band 2 is licensed spectrum one of the Big Three (Verizon, AT&amp;T, or T-Mobile) might get pretty angry with me. To solve that problem I also found two Willtek 4921 RF Shields which are just desktop-size Faraday boxes.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="766" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6048-766x1024.jpeg" alt="Open Willtek 4921 RF Shield" class="wp-image-20"/><figcaption class="wp-element-caption">You&#8217;ll see more of the Willteks later. No, I haven&#8217;t named them yet.</figcaption></figure>



<p class="wp-block-paragraph">I&#8217;ll be piping the FWFF&#8217;s Band 2 LTE signals into the Willtek later, but that requires getting the RF signals out of the Nokia. How do we do that? SMA pigtails, of course. But first I have to open up some mounting holes. Luckily Nokia did the hard work by milling holes into the aluminum chassis already, and all we have to do is remove some of the heavy-duty faceplate label:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="594" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-1024x594.jpeg" alt="Cutting holes in the label covering the holes in the aluminum chassis" class="wp-image-22" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-1024x594.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-300x174.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-768x446.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-1536x891.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6042-2048x1188.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Now that I&#8217;ve got somewhere to mount the pigtails let&#8217;s take a look inside. I&#8217;ve circled the U.FL connectors on the RF card that I&#8217;ll be replacing. The internal antennas are printed onto PCBs that you can see at the bottom of the picture as a thin gray line that the black ANT2 cable leads to. I&#8217;m going to leave those in place since they&#8217;re taped into the unit.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="768" height="1024" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-768x1024.jpeg" alt="Antenna connectors on the RF card" class="wp-image-23" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-768x1024.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-225x300.jpeg 225w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-1152x1536.jpeg 1152w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-1536x2048.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6043-scaled.jpeg 1920w" sizes="auto, (max-width: 768px) 100vw, 768px" /></figure>



<p class="wp-block-paragraph">I carefully inserted the SMA connectors through the holes, tightened the retaining bolts and routed the cables back over the RF card&#8217;s heatsink to the antenna connectors. Then since we&#8217;re not removing the internal antennas, and because I don&#8217;t have any Kapton tape, I tucked the old antenna cables into the heatsink to hold them in place.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="616" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-1024x616.jpeg" alt="New antenna cables routed to the connectors, and old cables tucked into the heatsink." class="wp-image-24" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-1024x616.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-300x181.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-768x462.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-1536x925.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6046-2048x1233.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Last thing to do is put the case back on, and we&#8217;ve successfully converted our Nokia Flexi Zone Pico BTS FWFF into an FWFG!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="578" src="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-1024x578.jpeg" alt="FWFF is now an FWFG" class="wp-image-25" srcset="https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-1024x578.jpeg 1024w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-300x169.jpeg 300w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-768x433.jpeg 768w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-1536x866.jpeg 1536w, https://ioncontrol.co/blog/wp-content/uploads/2025/09/IMG_6047-2048x1155.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">It&#8217;s already commissioned to be part of my LTE lab network, but I&#8217;m waiting on putting together a local GPS-synced NTP server since all my eNBs want one, and the Nokia won&#8217;t enable the radios until it has one. (Thanks to Alexander Couzens/@lynxis for that suggestion&#8230;)</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
