<?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>ThingSoC &#8211; IoT Expert</title>
	<atom:link href="https://iotexpert.com/category/devkits/thingsoc/feed/" rel="self" type="application/rss+xml" />
	<link>https://iotexpert.com</link>
	<description>Engineering for the Internet of Things</description>
	<lastBuildDate>Sun, 05 Feb 2017 16:29:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://iotexpert.com/wp-content/uploads/2017/01/cropped-Avatar-32x32.jpg</url>
	<title>ThingSoC &#8211; IoT Expert</title>
	<link>https://iotexpert.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ThingSoC: Four I2C OLED Displays with PSoC4L</title>
		<link>https://iotexpert.com/thingsoc-psoc4l-i2c-oled-displays/</link>
					<comments>https://iotexpert.com/thingsoc-psoc4l-i2c-oled-displays/#respond</comments>
		
		<dc:creator><![CDATA[Alan Hawse]]></dc:creator>
		<pubDate>Mon, 06 Feb 2017 11:00:13 +0000</pubDate>
				<category><![CDATA[PSoC 4200]]></category>
		<category><![CDATA[PSoC Creator]]></category>
		<category><![CDATA[ThingSoC]]></category>
		<guid isPermaLink="false">https://iotexpert.com/?p=2830</guid>

					<description><![CDATA[Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them here Summary In the previous ThingSoC post I took you through building the firmware to make the PSoC4L drive the ThingSoC I2C hub.  Now what?  When originally looking around I saw a picture with 4x LCDs connected to the I2C hub, which I [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4><span style="color: #ff0000;"><span style="color: #008000;">Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them</span> <a href="https://www.crowdsupply.com/patternagents-llc/thingsoc-grovey?utm_source=thingSOC+Supporters&amp;utm_campaign=f1c4185485-launch_thingsoc_2017_01_23&amp;utm_medium=email&amp;utm_term=0_4aec98a7fc-f1c4185485-112421013" target="_blank" style="color: #ff0000;">here</a></span></h4>
<h2>Summary</h2>
<p>In the <a href="https://iotexpert.com/2017/02/02/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/" target="_blank">previous</a> ThingSoC post I took you through building the firmware to make the <a href="http://www.cypress.com/documentation/datasheets/psoc-4-psoc-4200l-family-datasheet">PSoC4L</a> drive the ThingSoC I2C hub.  Now what?  When originally looking around I saw a picture with 4x LCDs connected to the I2C hub, which I thought was cool. In this post Ill show you how to do the same thing with PSoC and the <a href="https://github.com/olikraus/u8g2" target="_blank">U8G2</a> library which I talked about in this <a href="https://iotexpert.com/2017/02/01/pinball-driving-oled-using-u8g2-library/" target="_blank">article</a>. To do this I will:</p>
<ol>
<li>Create New PSoC4L Project + Integrate the U8G2 Library</li>
<li>Update the PSoC4L Firmware</li>
<li>Test the PSoC4L Firmware</li>
</ol>
<p>Here is the picture:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13.jpg"><img fetchpriority="high" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13.jpg" alt="4 I2C Displays, Inspiration" width="640" height="640" class="alignnone wp-image-2839 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13.jpg 640w, https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13-300x300.jpg 300w, https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13-100x100.jpg 100w, https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13-600x600.jpg 600w, https://iotexpert.com/wp-content/uploads/2017/02/lcd_rgb_13-150x150.jpg 150w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
<h2>Create New PSOC4L Project + Integrate the U8G2 Library</h2>
<p>Maybe it should have been obvious, but for some reason it never occurred to me to do a copy/paste to duplicate a project.  I guess that I&#8217;m slow that way.  To do this right click on a project in the workspace explorer and then do paste.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM.png"><img decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM.png" alt="PSoC Creator Edit Build Settings" width="820" height="1150" class="alignnone wp-image-2851 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM.png 820w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM-600x841.png 600w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM-214x300.png 214w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM-768x1077.png 768w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.04.36-AM-730x1024.png 730w" sizes="(max-width: 820px) 100vw, 820px" /></a></p>
<p>The next step is to integrate the firmware from the U8G2 Library. Start by &#8220;gitting&#8221; with &#8220;git@github.com:olikraus/u8g2.git&#8221;.  Then you need to add the directory to your project by right clicking the project and selecting &#8220;Build Settings&#8221;.  You need to add U8G2 Library to the additional include directories.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM.png"><img decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM.png" alt="Add the U8G2 Library" width="1588" height="1126" class="alignnone wp-image-2852 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM.png 1588w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM-600x425.png 600w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM-300x213.png 300w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM-768x545.png 768w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.09.47-AM-1024x726.png 1024w" sizes="(max-width: 1588px) 100vw, 1588px" /></a></p>
<p>Add the all of the .h and .c files by right clicking the project and selection &#8220;Add-&gt;Existing Item&#8221;</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM.png" alt="copy the u8g2 files into the PSoC4L project" width="972" height="1048" class="alignnone wp-image-2853 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM.png 972w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM-600x647.png 600w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM-278x300.png 278w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM-768x828.png 768w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-03-at-8.12.17-AM-950x1024.png 950w" sizes="auto, (max-width: 972px) 100vw, 972px" /></a></p>
<p>Navigate to the U8G2 library and add all of the .c and .h files.  The last thing you need is to bring in the HAL that I wrote for PSoC and described in this <a href="https://iotexpert.com/2017/02/01/pinball-driving-oled-using-u8g2-library/" target="_blank">post</a>.  Specifically you need to bring in the two functions</p>
<ul>
<li>psoc_gpio_and_delay_cb</li>
<li>u8x8_byte_hw_i2c</li>
</ul>
<p>I suppose that I should package the whole thing up in a component.  But, Ill leave that as an exercise for the reader.</p>
<h2>Update the PSoC4L Firmware</h2>
<p>The cool thing about the whole setup with the I2CHUB is that it allows you to have 4 devices with the same I2C address attached to one PSoC SCB at the same time.  To get going with the firmware, I start by defining an array of u8x8_t structures to represent the 4 different displays attaches to the 4 different ports on the I2C hub. (line 186).  Then I create a function called setupDisplay that initializes the display etc. (lines 199-203).  The only trick in the firmware is that <a href="https://en.wikipedia.org/wiki/Dennis_Ritchie" target="_blank">Dennis Ritchie</a> defined arrays to run from 0-3 but the I2C busses are labeled 1-4,  this is the reason for subtracting 1 from the input lcd number.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM.png" alt="PSoC4L Firmware to initialize the U8G2 Display" width="1044" height="404" class="alignnone wp-image-2831 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM.png 1044w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM-600x232.png 600w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM-300x116.png 300w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM-768x297.png 768w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.19.50-AM-1024x396.png 1024w" sizes="auto, (max-width: 1044px) 100vw, 1044px" /></a></p>
<p>The next step is modifying command processors in the main loop.  Specifically, I will add the commands q,w,e,r to startup the displays on I2C ports 1,2,3,4.  And, I will add those commands to the help print out.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.18.57-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.18.57-AM.png" alt="Modifying the PSoC4L CLI" width="652" height="545" class="alignnone wp-image-2832 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.18.57-AM.png 652w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.18.57-AM-600x502.png 600w, https://iotexpert.com/wp-content/uploads/2017/02/Screen-Shot-2017-02-02-at-7.18.57-AM-300x251.png 300w" sizes="auto, (max-width: 652px) 100vw, 652px" /></a></p>
<h2>Test the PSoC4L Firmware</h2>
<p>In order to make a connection from the Grove 4-pin connectors to my breadboard I used <a href="http://www.switchdoc.com" target="_blank">Switch Doc Labs</a> connectors which I bought from <a href="https://www.amazon.com/Cables-Grove-Jumper-Grove-Conversion/dp/B01F25VYF2/ref=sr_1_3?ie=UTF8&amp;qid=1486038649&amp;sr=8-3&amp;keywords=grove+4+pin" target="_blank">Amazon.com</a>.  For some reason you can&#8217;t purchase them from the Switch Doc Labs website or the SeeedStudio website, but they are very handy.  As an unrelated side note I had never seen (or in fact ever heard of) Switch Doc Labs.  But their website has a bunch of tutorials about the Raspberry Pi and Grove ecosystem boards for use with IoT-ifying house plants.  Seemed pretty cool.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/41Z4kxiN9DL.jpg"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/41Z4kxiN9DL.jpg" alt="Grove to Breadboard Switch Doc Labs Breakout Cable" width="500" height="375" class="alignnone wp-image-2833 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/02/41Z4kxiN9DL.jpg 500w, https://iotexpert.com/wp-content/uploads/2017/02/41Z4kxiN9DL-300x225.jpg 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></a></p>
<p>Now when I press &#8220;qwer&#8221; in my command console I get this:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/02/IMG_3652.jpg"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/02/IMG_3652.jpg" alt="PSoC4L Driving 4 OLED LCDs" width="4032" height="3024" class="alignnone size-full wp-image-2860" /></a></p>
<p><span><p>You can find all of the projects in the TSoC Series at my GitHub ThingSoC repository git@github.com:iotexpert/ThingSoC.git</p>
<p><div class="table-responsive"><table  style="width:95%; "  class="easy-table easy-table-default " border="1">
<thead>
<tr><th >Index</th>
<th >Description</th>
</tr>
</thead>
<tbody>
<tr><td ><a href="https://iotexpert.com/2017/01/25/thingsoc-psoc4l/">ThingSoc: TSoC PSoC4L Development Kit from PatternAgents</a></td>
<td >Introduction to ThingSoC</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/01/30/thingsoc4l-using-debugging-the-psoc4-clock/" target="_blank">ThingSoC PSoC4L: Using &amp; Debugging the PSoC4 Clock</a></td>
<td >Debugging a beta firmware problem</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/02/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/" target="_blank">ThingSoC: The TSoC GROVEY I2CHUB : I2C Hub/Switch</td>
<td >Evaluating the ThingSoC I2C Hub</a></td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/06/thingsoc-psoc4l-i2c-oled-displays/" target="_blank">ThingSoC: Multiple I2C Displays</td>
<td >Using the I2CHUB and U8X8 Library</a></td>
<td >A project using ThingSoC I2C Hub &amp; 4 OLED Displays</td>
</tr>
</tbody></table></div></p></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://iotexpert.com/thingsoc-psoc4l-i2c-oled-displays/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ThingSoC: The TSoC GROVEY I2CHUB : I2C Hub/Switch</title>
		<link>https://iotexpert.com/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/</link>
					<comments>https://iotexpert.com/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/#respond</comments>
		
		<dc:creator><![CDATA[Alan Hawse]]></dc:creator>
		<pubDate>Thu, 02 Feb 2017 10:28:39 +0000</pubDate>
				<category><![CDATA[PSoC 4200]]></category>
		<category><![CDATA[ThingSoC]]></category>
		<guid isPermaLink="false">https://iotexpert.com/?p=2782</guid>

					<description><![CDATA[Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them here Summary One of the boards that the Pattern Agents guys sent me was a TSOC GROVEY I2CHUB : I2C Hub/Switch.  In this post I will take you through the process that I went through to evaluate the board and build an interface to the ThingSoc TSoC [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4><span style="color: #ff0000;"><span style="color: #008000;">Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them</span> <a href="https://www.crowdsupply.com/patternagents-llc/thingsoc-grovey?utm_source=thingSOC+Supporters&amp;utm_campaign=f1c4185485-launch_thingsoc_2017_01_23&amp;utm_medium=email&amp;utm_term=0_4aec98a7fc-f1c4185485-112421013" target="_blank" style="color: #ff0000;">here</a></span></h4>
<h2>Summary</h2>
<p>One of the boards that the <a href="http://www.patternagents.com" target="_blank">Pattern Agents</a> guys sent me was a <a href="http://patternagents.com/projects/TSOC_GROVEY_I2CHUB.html" target="_blank">TSOC GROVEY I2CHUB : I2C Hub/Switch</a>.  In this post I will take you through the process that I went through to evaluate the board and build an interface to the ThingSoc TSoC 4L base board.</p>
<ol>
<li>Introduction to the TSoC Grovey I2CHUB</li>
<li>Discussion of PCA9546A I2C</li>
<li>Using the MiniProg-3 to interact with the PCA9546A</li>
<li>Building a Command Line Interface (CLI) using the USB/UART</li>
<li>Adding firmware to mimic the MiniProg-3 I2C list to the CLI</li>
<li>Adding a &#8220;port change&#8221; feature to the CLI firmware</li>
</ol>
<h2>Introduction to the TSoC Grovey I2CHUB</h2>
<p>The ThingSoC I2C Hub is a ThingSoC Compatible (not Compliant) board that serves as a bridge from the base board to 4 separate programmable I2C busses using an NXP/TI 9546A bridge chip.  Each of the I2C busses is attached via a <a href="https://www.seeedstudio.com" target="_blank">SeeedStudio</a> <a href="https://www.seeedstudio.com/category/Grove-c-45.html" target="_blank">Grove connector</a>.  Grove is an ecosystem of sensors (Humidity, Temperature etc.) that are all? mostly? I2C connected.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/TSOC_GROVEY_I2CHUB_pop_top.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/TSOC_GROVEY_I2CHUB_pop_top.png" alt="ThingSoC I2CHub" width="640" height="442" class="alignnone wp-image-2793 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/TSOC_GROVEY_I2CHUB_pop_top.png 640w, https://iotexpert.com/wp-content/uploads/2017/01/TSOC_GROVEY_I2CHUB_pop_top-600x414.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/TSOC_GROVEY_I2CHUB_pop_top-300x207.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a></p>
<h2>Discussion of PCA9546A I2C</h2>
<p>The PCA9546A is made by <a href="http://www.ti.com/product/PCA9546A" target="_blank">TI</a> and <a href="http://www.nxp.com/documents/data_sheet/PCA9546A.pdf" target="_blank">NXP</a> (or whatever they are calling themselves these days) and can be purchased for about $0.70 from <a href="http://www.digikey.com/products/en?keywords=pca9546a" target="_blank">Digikey</a>, <a href="http://www.mouser.com/Search/Refine.aspx?Keyword=pca9546A" target="_blank">Mouser</a>, or <a href="https://www.arrow.com/en/products/search?q=pca9546a" target="_blank">Arrow</a>.  The chip is pretty cool.  It will let you connect your I2C master to 1 of 4 I2C busses.  It will actually let you connect more than one bus at a time.  This chip enables you to connect multiple slaves with the same address to your I2C master.</p>
<p>Here is a simplified picture from TIs datasheet.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.07.02-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.07.02-PM.png" alt="PCA9546A Block Diagram" width="674" height="504" class="alignnone wp-image-2791 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.07.02-PM.png 674w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.07.02-PM-600x449.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.07.02-PM-300x224.png 300w" sizes="auto, (max-width: 674px) 100vw, 674px" /></a></p>
<p>To control the system you just need to write into the control register with a bit mask.  The bit masks contains which slaves busses you want switched on.  Here is a screen shot from NXPs datasheet:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM.png" alt="PCA9546A Control Register" width="1019" height="796" class="alignnone wp-image-2792 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM.png 1019w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM-600x469.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM-300x234.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.11.51-PM-768x600.png 768w" sizes="auto, (max-width: 1019px) 100vw, 1019px" /></a></p>
<h2>Using the MiniProg-3 to interact with the PCA9546A</h2>
<p>I start the whole firmware journey by using a MiniProg-3 as an I2C&lt;&#8211;&gt;USB bridge.  This allows me to type I2C commands in the Bridge Control Panel which go directly to the chip (without writing firmware).  In the picture below you can see that I have the MiniProg-3 attached to the ThingSoC board using jumper wires.  I also use the MiniProg-3 to power the board.</p>
<h2><a href="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3644.jpg"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3644.jpg" alt="Using a MiniProg-3 to Probe the ThingSoC I2C Hub" width="4032" height="3024" class="alignnone wp-image-2789 size-full" /></a></h2>
<p>When I press &#8220;List&#8221;, the Bridge Control Panel probes all of the I2C addresses.  If a device ACKs, it prints out that fact in the output window.  In the picture below you can see that PCA9546A is attached at address 0x73.  I then read and write the control register, which also works as expected.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM.png" alt="Bridge Control Panel" width="1123" height="681" class="alignnone wp-image-2790 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM.png 1123w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM-600x364.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM-300x182.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM-768x466.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-11.35.13-AM-1024x621.png 1024w" sizes="auto, (max-width: 1123px) 100vw, 1123px" /></a></p>
<p>The address 0x73 makes sense as you can see that (in the picture above) there is a blob of solder on &#8220;A2&#8221; which pulls it low (instead of the default high).  Here is that part of the schematic:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM.png" alt="ThingSoC Schematic for PCA9546A Address Selection" width="1006" height="438" class="alignnone wp-image-2812 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM.png 1006w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM-600x261.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM-300x131.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.25.46-PM-768x334.png 768w" sizes="auto, (max-width: 1006px) 100vw, 1006px" /></a></p>
<h2>Building a Command Line Interface (CLI) over the USB/UART</h2>
<p>Now I am  ready to build a command line interface using the USB &lt;&#8211;&gt; UART Bridge.  First, I make a schematic with the USB-FS (Full Speed), LED and I2C components.  Notice that the USBFS is setup as a USBUART.  The I2C is configured as a Master.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.55.41-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.55.41-PM.png" alt="PSoC Creator Schematic for ThingSoC I2C Hub Firmware" width="387" height="424" class="alignnone wp-image-2818 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.55.41-PM.png 387w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.55.41-PM-274x300.png 274w" sizes="auto, (max-width: 387px) 100vw, 387px" /></a></p>
<p>The Pins are selected as:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.57.54-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.57.54-PM.png" alt="PSoC Creator Pin Selection" width="499" height="150" class="alignnone wp-image-2819 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.57.54-PM.png 499w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.57.54-PM-300x90.png 300w" sizes="auto, (max-width: 499px) 100vw, 499px" /></a></p>
<p>Next is a helper function to printout text via the CDC UART:</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.56.12-PM.png" alt="PSoC Creator Firmware PrintBuff Helper Function" width="851" height="216" class="alignnone wp-image-2817 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.56.12-PM.png 851w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.56.12-PM-600x152.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.56.12-PM-300x76.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.56.12-PM-768x195.png 768w" sizes="auto, (max-width: 851px) 100vw, 851px" /></p>
<p>Then I write a little bit of firmware for the CLI.  The function just reads from the UART and, if the user has pressed a button, then it issues that command.</p>
<p>Lines 99-103 get the USBUART going, and deal with changes (e.g. unplug events).</p>
<p>The only thing that you might not have seen is the &#8220;Clear Screen&#8221;.  I just send out the escape sequence (old school) for clear screen and move home from the <a href="http://www.climagic.org/mirrors/VT100_Escape_Codes.html" target="_blank">VT100 Escape Codes</a>.</p>
<h2><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM.png" alt="PSoC Creator Main Command Line Interface" width="905" height="871" class="alignnone wp-image-2802 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM.png 905w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM-600x577.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM-300x289.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.37.51-PM-768x739.png 768w" sizes="auto, (max-width: 905px) 100vw, 905px" /></a></h2>
<h2>Adding firmware to mimic the MiniProg-3 I2C list to the CLI</h2>
<p>When you press &#8220;List&#8221; in the Bridge Control Panel, what happens?  Although I have been using the Bridge Control Panel for years I wasn&#8217;t exactly sure.  To find the answer, I plugged in my <a href="https://www.saleae.com/originallogic16" target="_blank">Saleae Logic 16</a> and watched the output.</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_0461.jpg" alt="Probing using MiniProg-3 and Saleae Logic-16" width="4032" height="3024" class="alignnone wp-image-2787 size-full" /></p>
<p>In this screenshot from the Saleae Logic output screen,  you can see that the Bridge Control Panel sends out a &#8220;Read 0x15&#8221; which was NAKed.</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.38.09-AM.png" alt="Saleae Logic 16 address 0x15 NAK" width="516" height="160" class="alignnone wp-image-2785 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.38.09-AM.png 516w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.38.09-AM-300x93.png 300w" sizes="auto, (max-width: 516px) 100vw, 516px" /></p>
<p>In this screen shot you can see that when the &#8220;Read 0x73&#8221; occurs, that the PCA9456A ACKs which tells the Bridge Control Panel that the device is there.</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.37.03-AM.png" alt="Saleae Logic 16 0x73 ACK" width="699" height="152" class="alignnone wp-image-2786 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.37.03-AM.png 699w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.37.03-AM-600x130.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-10.37.03-AM-300x65.png 300w" sizes="auto, (max-width: 699px) 100vw, 699px" /></p>
<p>While I was writing the entry, I looked around at several implementations.  It appears that sometimes people send &#8220;Write Address&#8221; instead of &#8220;Read Address&#8221;.  I wasn&#8217;t sure exactly what was right, so I consulted <a href="https://iotexpert.com/2017/01/06/drzwave-bio-iot-expert-psoc5-and-z-wave-engineer/" target="_blank">Dr. Zwave</a>.  He really should go by Dr. I2C since that is what he did at Cypress.  Anyway, he pointed out that you will hang the I2C bus if you try a Read and then don&#8217;t read the next byte.  With a write you don&#8217;t actually need to keep writing.  I decided to follow his instructions.</p>
<p>I have always liked the output of the Raspberry Pi I2CDetect command.  Here is a screen shot from one of my Raspberry Pi&#8217;s where a PSoC4 is attached on I2C Address 0x8.  I am not totally sure why the command does not probe addresses 0x00-0x02 (comment with the answer and Ill send you a devkit)</p>
<h2><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.27.39-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.27.39-PM.png" alt="Raspberry Pi I2CDetect" width="511" height="187" class="alignnone wp-image-2799 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.27.39-PM.png 511w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-12.27.39-PM-300x110.png 300w" sizes="auto, (max-width: 511px) 100vw, 511px" /></a></h2>
<p>The implementation of i2c_detect on the PSoC4L is pretty simple.  All I need to do is iterate through all of the addresses from 0-&gt;0x7F.  Then attempt to write.  If a device ACKs then printout the address, otherwise move on.  Instead of  one big loop, I split it up into two loops to make the printing a little bit simpler.  Here is the code:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM.png" alt="PSoC Creator I2C Detect Firmware" width="866" height="514" class="alignnone wp-image-2803 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM.png 866w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM-600x356.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM-300x178.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.13-PM-768x456.png 768w" sizes="auto, (max-width: 866px) 100vw, 866px" /></a></p>
<p>Now, when I press &#8220;l&#8221; on the CLI, it probes all of the legal addresses on the I2C bus from the PSoC4L.  You can see that only the PCA9546A at address 0x73 is active.  How cool is that?</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.57-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.57-PM.png" alt="PSoC Creator Firmware I2CDetect" width="392" height="153" class="alignnone wp-image-2804 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.57-PM.png 392w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-1.39.57-PM-300x117.png 300w" sizes="auto, (max-width: 392px) 100vw, 392px" /></a></p>
<h2>Adding a &#8220;port change&#8221; feature to the CLI firmware</h2>
<p>The last block of code adds three functions which let me control the PCA9546A control register.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM.png" alt="PSoC Creator PCA9546A Control Firmware" width="845" height="715" class="alignnone wp-image-2811 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM.png 845w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM-600x508.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM-300x254.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-29-at-2.12.06-PM-768x650.png 768w" sizes="auto, (max-width: 845px) 100vw, 845px" /></a></p>
<p>To test the whole thing, I attach the Saleae Logic Analzer to I2C Port1.  Then I probe to make sure that I can attach and unattached the bus.</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3643-2.jpg" alt="Test Jig for PSoC Creator Firmware" width="4032" height="3024" class="alignnone wp-image-2805 size-full" /></p>
<p><span><p>You can find all of the projects in the TSoC Series at my GitHub ThingSoC repository git@github.com:iotexpert/ThingSoC.git</p>
<p><div class="table-responsive"><table  style="width:95%; "  class="easy-table easy-table-default " border="1">
<thead>
<tr><th >Index</th>
<th >Description</th>
</tr>
</thead>
<tbody>
<tr><td ><a href="https://iotexpert.com/2017/01/25/thingsoc-psoc4l/">ThingSoc: TSoC PSoC4L Development Kit from PatternAgents</a></td>
<td >Introduction to ThingSoC</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/01/30/thingsoc4l-using-debugging-the-psoc4-clock/" target="_blank">ThingSoC PSoC4L: Using &amp; Debugging the PSoC4 Clock</a></td>
<td >Debugging a beta firmware problem</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/02/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/" target="_blank">ThingSoC: The TSoC GROVEY I2CHUB : I2C Hub/Switch</td>
<td >Evaluating the ThingSoC I2C Hub</a></td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/06/thingsoc-psoc4l-i2c-oled-displays/" target="_blank">ThingSoC: Multiple I2C Displays</td>
<td >Using the I2CHUB and U8X8 Library</a></td>
<td >A project using ThingSoC I2C Hub &amp; 4 OLED Displays</td>
</tr>
</tbody></table></div></p></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://iotexpert.com/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ThingSoC PSoC4L: Using &#038; Debugging the PSoC4 Clock</title>
		<link>https://iotexpert.com/thingsoc4l-using-debugging-the-psoc4-clock/</link>
					<comments>https://iotexpert.com/thingsoc4l-using-debugging-the-psoc4-clock/#respond</comments>
		
		<dc:creator><![CDATA[Alan Hawse]]></dc:creator>
		<pubDate>Mon, 30 Jan 2017 11:00:12 +0000</pubDate>
				<category><![CDATA[PSoC 4200]]></category>
		<category><![CDATA[ThingSoC]]></category>
		<guid isPermaLink="false">https://iotexpert.com/?p=2733</guid>

					<description><![CDATA[Pattern Agents are running a crowd funding effort for TSoC &#8230; here Summary In the previous post I told you that I immediately blew away the factory firmware on the TSoC4L board.  I&#8217;m like that sometimes :-).  In this post I am going to take you through the entire process of getting and reprogramming the [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4><span style="color: #ff0000;"><span style="color: #008000;">Pattern Agents are running a crowd funding effort for TSoC &#8230;</span> <a href="https://www.crowdsupply.com/patternagents-llc/thingsoc-grovey?utm_source=thingSOC+Supporters&amp;utm_campaign=f1c4185485-launch_thingsoc_2017_01_23&amp;utm_medium=email&amp;utm_term=0_4aec98a7fc-f1c4185485-112421013" target="_blank" style="color: #ff0000;">here</a></span></h4>
<h2>Summary</h2>
<p>In the previous post I told you that I immediately blew away the factory firmware on the TSoC4L board.  I&#8217;m like that sometimes :-).  In this post I am going to take you through the entire process of getting and reprogramming the factory firmware, then finding and debugging a PSoC4 clock problem.  The rest of this post is:</p>
<ol>
<li>Getting the correct firmware back on the TSoC4L Board</li>
<li>Running into a bug in the beta version of the firmware</li>
<li>Using the debugger to find the bug</li>
<li>Explaining the functionality of Low Frequency Clocks and the Watch Dog Timer</li>
<li>The Pattern Agents bug fix</li>
</ol>
<h2>Factory Firmware</h2>
<p>Getting things going again starts with &#8220;git&#8221;ing the firmware.  This can be done by &#8220;git clone git@github.com:PatternAgents/TSOC_PSoC4L.git&#8221;.  Once you have the repo cloned you will find a bunch of good stuff including:</p>
<ol>
<li>datasheets: All the datasheets</li>
<li>documentation: The PatternAgents documentation (quick start)</li>
<li>drivers: The windows USB &lt;-&gt; UART drivers</li>
<li>eagleUp: JPG renderings of the PCB</li>
<li>firmware: The PSoC Creator Project</li>
<li>hardware: gerbers, boms etc</li>
<li>images: renderings of the board, photos of the board etc</li>
<li>revisions: old revisions of the Eagle project files</li>
<li>The Eagle PCB Project including schematic and layout</li>
</ol>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-1.19.40-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-1.19.40-PM.png" alt="TSoC4 L Files from GitHub" width="677" height="289" class="alignnone wp-image-2747 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-1.19.40-PM.png 677w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-1.19.40-PM-600x256.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-1.19.40-PM-300x128.png 300w" sizes="auto, (max-width: 677px) 100vw, 677px" /></a></p>
<p>When you open the PSoC Creator Workspace you will find two projects</p>
<ol>
<li>A USB Bootloader &#8211; called &#8220;USBFS_Bootloader&#8221;</li>
<li>The TSoC RSVP Firmware &#8211; called &#8220;rspvsis_4l_typ&#8221;</li>
</ol>
<p>The system is supposed to</p>
<ol>
<li>Start the USB HID bootloader (so you could get new firmware).  Wait for 10 seconds for a <a href="https://iotexpert.com/?s=bootloader" target="_blank">bootloader</a> host to start then if it doesnt &#8230; then start</li>
<li>The RSVP Firmware</li>
</ol>
<p>When you plug in the board you will see the TSoC4L enumerate as &#8220;Cypress ThingSoc Bootloader&#8221;.  Then, after 10 seconds, you should see it reboot, then enumerate as &#8220;Cypress USB UART&#8221;.  But, this was not happening for me.  Why?  I wasn&#8217;t sure.  The first thing that I did was add a blinking LED circuit that looked like this:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.34.18-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.34.18-AM.png" alt="Blinking LED" width="491" height="129" class="alignnone size-full wp-image-2753" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.34.18-AM.png 491w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.34.18-AM-300x79.png 300w" sizes="auto, (max-width: 491px) 100vw, 491px" /></a></p>
<p>But the LED was not blinking.  That meant that the firmware was not even getting to main i.e. it was hanging BEFORE main in the PSoC boot code.  But where and why?</p>
<h2>Using the Debugger to Find the Bug</h2>
<p>How do you figure out where the system is stuck if you can&#8217;t even use the &#8220;blinking LED&#8221; or &#8220;printf&#8221; debug?  Simple.  Use the debugger.  Start by programming the PSoC with your firmware.  Then click &#8220;Debug-&gt;Attach to running target&#8221;.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.39.48-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.39.48-AM.png" alt="Starting the PSoC Debugger" width="584" height="313" class="alignnone wp-image-2754 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.39.48-AM.png 584w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.39.48-AM-300x161.png 300w" sizes="auto, (max-width: 584px) 100vw, 584px" /></a></p>
<p>The debugger will start.  Then you will be able to press the &#8220;Pause&#8221; button. which will take you to a screen that looks like this:</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM.png" alt="PSoC4 Clock Busy Wait Loop" width="1184" height="623" class="alignnone wp-image-2738 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM.png 1184w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM-600x316.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM-300x158.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM-768x404.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.21.22-AM-1024x539.png 1024w" sizes="auto, (max-width: 1184px) 100vw, 1184px" /></p>
<p>The chip is stuck on line 234.  What does line 234 do?  That is a busy wait loop.  It is waiting for the Watch Dog Control Register to clear.  To explain that, I will need to take you through the PSoC4 Low Frequency Clocks.  First you should notice that the file we are in is named &#8220;cyfitter_cfg.c&#8221;.  What is this file?  If you look at the top, this is what PSoC Creator says.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM.png" alt="" width="841" height="174" class="alignnone size-full wp-image-2757" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM.png 841w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM-600x124.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM-300x62.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-6.56.40-AM-768x159.png 768w" sizes="auto, (max-width: 841px) 100vw, 841px" /></a></p>
<p>This means that the &#8220;cyfitter_cfg.c&#8221; file is synthesized by PSoC Creator when you do a build based on what you configured when you setup your project.  This file contains a bunch of the startup code including the code that gets the clock systems going.  Line 234 is inside of a function called &#8220;ClockSetup&#8221;.  All of this code is called BEFORE you get to main().</p>
<h2>The PSoC4 Clock(s)</h2>
<p>To explain why we are stuck there you first need to double click on the &#8220;Clocks&#8221; tab in the Design Wide Resources.  When you do that it will take you to this screen which contains a bunch of information about the clocking system in the PSoC.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM.png" alt="PSoC4 Clock Setup" width="1224" height="816" class="alignnone wp-image-2745 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM.png 1224w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM-600x400.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM-300x200.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM-768x512.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-10.05.41-AM-1024x683.png 1024w" sizes="auto, (max-width: 1224px) 100vw, 1224px" /></a></p>
<p>In the screen above, you can see that there are three Timers in the Watch Dog Timer system (WDT) that are clocked (i.e. have a Source Clock of) by the Low Frequency Clock (LFCLK).  The LFCLK has its source as the Watch Crystal Oscillator (WCO).  If you double click the WCO line it will take you to a screen that is much easier to see what is going on, specifically the &#8220;Configure System Clocks&#8221; screen:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM.png" alt="PSoC4 Clock - Low Frequency" width="794" height="595" class="alignnone wp-image-2734 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM.png 794w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM-600x450.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM-300x225.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-6.22.50-AM-768x576.png 768w" sizes="auto, (max-width: 794px) 100vw, 794px" /></a></p>
<p>In the screen above you can see that the LFCLK has two choices of oscillator sources, the &#8220;ILO&#8221; or the &#8220;WCO&#8221;.  ILO stands for Internal Low Speed Oscillator.  The ILO is a fairly inaccurate (+- 60%) RC oscillator that is built inside of the chip.   It is designed to be very low power which is why it is so inaccurate.  If you need a more accurate oscillator, then you should use an external oscillator, specifically a Watch Crystal Oscillator or WCO.  A WCO is a 32.768KHz crystal oscillator.  These watch crystal oscillators give you very precise clocks that can be used to drive real time clocks accurately.</p>
<p>The next thing to see is there are three Watch Dog Timers (WDT) numbered 0-2.  These times are driven by the &#8220;LFCLK&#8221;.  Here is a picture from the <a href="http://www.cypress.com/file/126171/download" target="_blank">PSoC Technical Reference Manual</a>.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM.png"><br />
</a><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM.png" alt="PSoC4 Clock - WDT Block Diagram" width="1936" height="954" class="alignnone wp-image-2742 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM.png 1936w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM-600x296.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM-300x148.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM-768x378.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.44.50-AM-1024x505.png 1024w" sizes="auto, (max-width: 1936px) 100vw, 1936px" /></a></p>
<p>So what is the &#8220;CYREG_WDT_CONTROL&#8221;?  You can find that by looking in the <a href="http://www.cypress.com/file/122336/download" target="_blank">PSoC4 Registers TRM</a>.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM.png" alt="PSoC4 Clock WDT Control Register" width="1444" height="1374" class="alignnone wp-image-2743 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM.png 1444w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM-600x571.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM-300x285.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM-768x731.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-23-at-8.43.23-AM-1024x974.png 1024w" sizes="auto, (max-width: 1444px) 100vw, 1444px" /></a></p>
<p>The busy wait loop is waiting for bits 19,11,3 to be cleared.  Those bits are &#8220;WDT_RESETx&#8221;  They become 0 when the three WDT timers are cleared which happens &#8220;several LFCLK cycles&#8221; after the reset.  As a reminder, here is that block of code:</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.31.22-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.31.22-AM.png" alt="" width="623" height="20" class="alignnone size-full wp-image-2763" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.31.22-AM.png 623w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.31.22-AM-600x19.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.31.22-AM-300x10.png 300w" sizes="auto, (max-width: 623px) 100vw, 623px" /></a></p>
<p>This still leaves us with the question, &#8220;What is the problem?&#8221;.  If you look on the back of the ThingSoC4L board you will see there is no Crystal populated on this board. (the blank footprint on the right side of the back).  The WCO is an optional feature from Pattern Agents.  If you need the more accurate timing, you need to solder on your own Crystal.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3637.jpg"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3637.jpg" alt="Backside of ThingSoC4L PCB" width="4032" height="3024" class="alignnone wp-image-2759 size-full" /></a></p>
<p>If there is no WCO crystal, then the WDT timer reset will never happen because LFCLK isn&#8217;t doing anything.  And, the busy wait loop will never end.  Mystery solved.</p>
<h2>The Pattern Agents Bug Fix</h2>
<p>To fix the startup problem, the Pattern Agents guys changed the clock configuration to</p>
<ol>
<li>Turn off the WDTs</li>
<li>Use the ILO as the source of the LFCLK</li>
</ol>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM.png" alt="PSoC4 Clock - Low Frequency Setup" width="795" height="595" class="alignnone wp-image-2764 size-full" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM.png 795w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM-600x449.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM-300x225.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-24-at-7.34.07-AM-768x575.png 768w" sizes="auto, (max-width: 795px) 100vw, 795px" /></a></p>
<p><span><p>You can find all of the projects in the TSoC Series at my GitHub ThingSoC repository git@github.com:iotexpert/ThingSoC.git</p>
<p><div class="table-responsive"><table  style="width:95%; "  class="easy-table easy-table-default " border="1">
<thead>
<tr><th >Index</th>
<th >Description</th>
</tr>
</thead>
<tbody>
<tr><td ><a href="https://iotexpert.com/2017/01/25/thingsoc-psoc4l/">ThingSoc: TSoC PSoC4L Development Kit from PatternAgents</a></td>
<td >Introduction to ThingSoC</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/01/30/thingsoc4l-using-debugging-the-psoc4-clock/" target="_blank">ThingSoC PSoC4L: Using &amp; Debugging the PSoC4 Clock</a></td>
<td >Debugging a beta firmware problem</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/02/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/" target="_blank">ThingSoC: The TSoC GROVEY I2CHUB : I2C Hub/Switch</td>
<td >Evaluating the ThingSoC I2C Hub</a></td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/06/thingsoc-psoc4l-i2c-oled-displays/" target="_blank">ThingSoC: Multiple I2C Displays</td>
<td >Using the I2CHUB and U8X8 Library</a></td>
<td >A project using ThingSoC I2C Hub &amp; 4 OLED Displays</td>
</tr>
</tbody></table></div></p></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://iotexpert.com/thingsoc4l-using-debugging-the-psoc4-clock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ThingSoC: TSoC PSoC4L Development Kit from PatternAgents</title>
		<link>https://iotexpert.com/thingsoc-psoc4l/</link>
					<comments>https://iotexpert.com/thingsoc-psoc4l/#respond</comments>
		
		<dc:creator><![CDATA[Alan Hawse]]></dc:creator>
		<pubDate>Wed, 25 Jan 2017 11:00:50 +0000</pubDate>
				<category><![CDATA[PSoC 4200]]></category>
		<category><![CDATA[ThingSoC]]></category>
		<guid isPermaLink="false">https://iotexpert.com/?p=2711</guid>

					<description><![CDATA[Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them here Summary Last week I got a box in the mail from my friend Tom Moxon in Oregon.  He runs a company called Pattern Agents.  I was excited when I saw the box because I love new development kits.  I was even more [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4><span style="color: #ff0000;"><span style="color: #008000;">Pattern Agents are running a crowd funding effort for ThingSoC TSoC4L &#8230; help them</span> <a href="https://www.crowdsupply.com/patternagents-llc/thingsoc-grovey?utm_source=thingSOC+Supporters&amp;utm_campaign=f1c4185485-launch_thingsoc_2017_01_23&amp;utm_medium=email&amp;utm_term=0_4aec98a7fc-f1c4185485-112421013" target="_blank" style="color: #ff0000;">here</a></span></h4>
<h2>Summary</h2>
<p>Last week I got a box in the mail from my friend Tom Moxon in Oregon.  He runs a company called <a href="http://patternagents.com" target="_blank">Pattern Agents</a>.  I was excited when I saw the box because I love new development kits.  I was even more happy when I opened the box and found a <a href="http://patternagents.com/projects/TSOC_PSOC4L.html" target="_blank">ThingSoC PSoC4L</a> kit.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/box.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/box.png" alt="" width="1500" height="1125" class="alignnone size-full wp-image-2750" srcset="https://iotexpert.com/wp-content/uploads/2017/01/box.png 1500w, https://iotexpert.com/wp-content/uploads/2017/01/box-600x450.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/box-300x225.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/box-768x576.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/box-1024x768.png 1024w" sizes="auto, (max-width: 1500px) 100vw, 1500px" /></a></p>
<p>Tom sent me three boards</p>
<ol>
<li><a href="http://patternagents.com/projects/TSOC_PSOC4L.html" target="_blank">A ThingSoC PSoC4L</a></li>
<li>A MiniProg Adaptor</li>
<li><a href="http://patternagents.com/projects/TSOC_GROVEY_I2CHUB.html" target="_blank">A ThingSoC I2C Hub</a></li>
</ol>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3629.jpg" alt="ThingSoC PSoC 4L Packaging" width="4032" height="3024" class="alignnone wp-image-2716 size-full" /></p>
<h2>ThingSoC PSoC4L</h2>
<p>The ThingSoC complies to a new open source stackable footprint called the <a href="http://thingsoc.github.io" target="_blank">ThingSoC Open Source Socket</a>.  This ThingSoC board is driven by a <a href="http://www.cypress.com/documentation/datasheets/psoc-4-psoc-4200l-family-datasheet" target="_blank">PSoC4L</a>.  The PSoC4L is the largest and most capable of the PSoC4 family.  This chip &#8220;completed&#8221; the high end of the PSoC4 family by adding more IOs, more Flash, more RAM and a USB controller.  The PSoC4L serves as the base MCU in the stack as well as providing a bridge to the PC via a USB &lt;&#8211;&gt; UART Connection.  The board also has a connection for a 3.7V LiPo battery to power the system.  In the picture below you can see the base board (on the left) with the programmer attachment (on the right).  The programmer attachment lets you attach a <a href="http://www.cypress.com/documentation/development-kitsboards/cy8ckit-002-psoc-miniprog3-program-and-debug-kit" target="_blank">MiniProg-3</a> or a Uart Bridge or an ISSP connection (like a MiniProg-1).</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3630.jpg" alt="thingsoc 4200l" width="4032" height="3024" class="alignnone wp-image-2715 size-full" /></p>
<p>Here is a picture of the backs of the boards.  On the back of the ThingSoC PSoC4L board you can see a place to solder a Cypress NVSRAM as well as a footprint for a Watch Crystal.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3633.jpg"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/IMG_3633-e1485122727807.jpg" width="4032" height="3024" class="alignnone wp-image-2713 size-full" alt="The backs of the ThingSoC PSoC4L" /></a></p>
<h2>The Blinking LED</h2>
<p>The first thing I did with the board (and no, reading the instructions wasn&#8217;t the first thing) was program the chip to blink the LED.  Obviously with a PSoC the best thing to do was make a schematic with a PWM driving the USER LED pin:</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.14.48-PM.png" alt="" width="900" height="624" class="alignnone size-full wp-image-2725" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.14.48-PM.png 900w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.14.48-PM-600x416.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.14.48-PM-300x208.png 300w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.14.48-PM-768x532.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></p>
<p>I used the default clock of 12MHZ, then I used the PWM pre divider to get the frequency down to something that I could see.</p>
<p><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM.png" alt="" width="1192" height="1326" class="alignnone size-full wp-image-2724" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM.png 1192w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM-600x667.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM-270x300.png 270w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM-768x854.png 768w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.15.11-PM-921x1024.png 921w" sizes="auto, (max-width: 1192px) 100vw, 1192px" /></p>
<p>Lastly, I wrote a tiny bit of firmware to get things going.  Notice that I use the CySysPmSleep to put the CPU to sleep.  It never wakes up from this sleep (because there are no interrupt sources to wake it up).  But, if it did, it would go right back to sleep because of the loop.</p>
<p><a href="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.16.04-PM.png"><img loading="lazy" decoding="async" src="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.16.04-PM.png" alt="" width="728" height="384" class="alignnone size-full wp-image-2722" srcset="https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.16.04-PM.png 728w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.16.04-PM-600x316.png 600w, https://iotexpert.com/wp-content/uploads/2017/01/Screen-Shot-2017-01-22-at-5.16.04-PM-300x158.png 300w" sizes="auto, (max-width: 728px) 100vw, 728px" /></a></p>
<p>After programming the board, the LED started right up.  That is good as it means everything makes sense.</p>
<p>When I programmed the Blinking LED project I overwrote Tom&#8217;s default firmware which is called &#8220;RISC&#8221;.  In the next post Ill talk more about the architecture of the ThingSoC PSoC4L.</p>
<p><span><p>You can find all of the projects in the TSoC Series at my GitHub ThingSoC repository git@github.com:iotexpert/ThingSoC.git</p>
<p><div class="table-responsive"><table  style="width:95%; "  class="easy-table easy-table-default " border="1">
<thead>
<tr><th >Index</th>
<th >Description</th>
</tr>
</thead>
<tbody>
<tr><td ><a href="https://iotexpert.com/2017/01/25/thingsoc-psoc4l/">ThingSoc: TSoC PSoC4L Development Kit from PatternAgents</a></td>
<td >Introduction to ThingSoC</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/01/30/thingsoc4l-using-debugging-the-psoc4-clock/" target="_blank">ThingSoC PSoC4L: Using &amp; Debugging the PSoC4 Clock</a></td>
<td >Debugging a beta firmware problem</td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/02/thingsoc-tsoc-grovey-i2chub-i2c-hubswitch/" target="_blank">ThingSoC: The TSoC GROVEY I2CHUB : I2C Hub/Switch</td>
<td >Evaluating the ThingSoC I2C Hub</a></td>
</tr>

<tr><td ><a href="https://iotexpert.com/2017/02/06/thingsoc-psoc4l-i2c-oled-displays/" target="_blank">ThingSoC: Multiple I2C Displays</td>
<td >Using the I2CHUB and U8X8 Library</a></td>
<td >A project using ThingSoC I2C Hub &amp; 4 OLED Displays</td>
</tr>
</tbody></table></div></p></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://iotexpert.com/thingsoc-psoc4l/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
