<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title><![CDATA[Dobrica Pavlinušić's random unstructured stuff: eeprom]]></title>
<link>https://saturn.ffzg.hr/rot13/index.cgi?action=weblog_display;category=eeprom</link>
<description></description>
<pubDate>Sat, 14 Aug 2021 11:18:00 -0000</pubDate>
<webMaster>root@saturn.ffzg.hr</webMaster>
<generator>Socialtext Workspace v2.19.0.2</generator>

<item>
<title><![CDATA[CH341A mini flash programmer]]></title>
<link>https://saturn.ffzg.hr/rot13/index.cgi?ch341a_mini_flash_programmer</link>
<description><![CDATA[<div>Creator: Dobrica Pavlinušić</div><hr/><div>Tags: eeprom</div><hr/><div class="wiki">
<div class="nlw_phrase"><table class="wafl_container">
  <tr>
    <td>
      <div class="wafl_box">
        
          <div class="wafl_titlebox">
            <div class="wafl_title">
              
                Contents: [Dobrica Pavlinušić's random unstructured stuff]
              
            </div>
          </div>
          <div class="wafl_items">
            
              <div class="wiki">
<ul>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#jumper_on_pins">Dobrica Pavlinušić's random unstructured stuff (jumper on pins)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] jumper on pins} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#i2c_in_userspace">Dobrica Pavlinušić's random unstructured stuff (I2C in userspace)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] I2C in userspace} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#flashrom_spi">Dobrica Pavlinušić's random unstructured stuff (flashrom SPI)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] flashrom SPI} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#linux_kernel_spi_module">Dobrica Pavlinušić's random unstructured stuff (linux kernel spi module)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] linux kernel spi module} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#linux_kernel_i2c_module">Dobrica Pavlinušić's random unstructured stuff (linux kernel i2c module)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] linux kernel i2c module} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#schematics_and_info">Dobrica Pavlinušić's random unstructured stuff (schematics and info)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] schematics and info} --></span></li>
<li><span class="nlw_phrase"><a title="section link" href="https://saturn.ffzg.hr/rot13/index.cgi?dobrica_pavlinu%C5%A1i%C4%87_s_random_unstructured_stuff#alternative_schematics">Dobrica Pavlinušić's random unstructured stuff (alternative schematics)</a><!-- wiki: {link: [Dobrica Pavlinušić's random unstructured stuff] alternative schematics} --></span></li>
</ul>
</div>

            
            
          </div>
        
      </div>
    </td>
  </tr>
</table>
<!-- wiki: {toc: }
--></div><br /><br /><span class="nlw_phrase"><img alt="ch341a_miniprogrammer.jpg" src="https://saturn.ffzg.hr/rot13/index.cgi/ch341a_miniprogrammer.jpg?action=attachments_download;page_name=ch341a_mini_flash_programmer;id=20180206182016-0-14583" /><!-- wiki: {image: ch341a_miniprogrammer.jpg} --></span><br /><br /><p>
This is 5V device without modification! It works for me(tm) but you have been warned</p>
<p>
<a target="_blank" title="(external link)" href="http://www.eevblog.com/forum/repair/ch341a-serial-memory-programmer-power-supply-fix/">http://www.eevblog.com/forum/repair/ch341a-serial-memory-programmer-power-supply-fix/</a></p>
<p>
Just lift pin 28 and put some tape under it to prevent any short circuit. Then solder one wire from this pin to pin 2 of AMS1117 and also to C4. The side of the C4 to connect is the one connected to CH341A pin 9.</p>
<span class="nlw_phrase"><a href="https://saturn.ffzg.hr/rot13/index.cgi/CHM341A-3V3-fix.jpg?action=attachments_download;page_name=ch341a_mini_flash_programmer;id=20180208065548-1-27294">CHM341A-3V3-fix.jpg</a><!-- wiki: {file: CHM341A-=3V3-=fix.jpg} --></span><br /><br /><h1 id="jumper_on_pins">jumper on pins</h1>
<p>
1-2 SPI flash programmer mode<br />
2-3 TTL serial mode</p>
<p>
supported out-of-box by flashrom, probably better option, but anyway:</p>
<p>
<a target="_blank" title="(external link)" href="https://github.com/setarcos/ch341prog">https://github.com/setarcos/ch341prog</a></p>
<pre>
dpavlin@nuc:/nuc/ch341a$ git clone https://github.com/setarcos/ch341prog
Cloning into 'ch341prog'...
remote: Counting objects: 104, done.
remote: Total 104 (delta 0), reused 0 (delta 0), pack-reused 104
Receiving objects: 100% (104/104), 34.79 KiB | 0 bytes/s, done.
Resolving deltas: 100% (61/61), done.
Checking connectivity... done.
dpavlin@nuc:/nuc/ch341a$ cd ch341prog/
dpavlin@nuc:/nuc/ch341a/ch341prog$ make
gcc -std=gnu99 -Wall ch341a.c main.c -o ch341prog  -lusb-1.0
dpavlin@nuc:/nuc/ch341a/ch341prog$ ./ch341prog 

Usage:
 -h, --help             display this message
 -i, --info             read the chip ID info
 -e, --erase            erase the entire chip
 -l, --length &lt;bytes&gt;   manually set length
 -w, --write &lt;filename&gt; write chip with data from filename
 -r, --read &lt;filename&gt;  read chip and save data to filename
 -t, --turbo            increase the i2c bus speed (-tt to use much faster speed)
 -d, --double           double the spi bus speed
</pre>
<br /><h1 id="i2c_in_userspace">I2C in userspace</h1>
<p>
<a target="_blank" title="(external link)" href="https://sourceforge.net/projects/ch341eepromtool/">https://sourceforge.net/projects/ch341eepromtool/</a></p>
<pre>
dpavlin@nuc:/nuc/ch341a/ch341eepromtool_0.5$ gcc -o ch341eeprom ch341eeprom.c ch341funcs.c -lusb-1.0
dpavlin@nuc:/nuc/ch341a/ch341eepromtool_0.5$ 
dpavlin@nuc:/nuc/ch341a/ch341eepromtool_0.5$ ./ch341eeprom 
ch341eeprom - an i2c EEPROM programming tool for the WCH CH341a IC
Version 0.5 copyright (c) 2011  asbokid &lt;ballymunboy@gmail.com&gt;

This program comes with asbolutely no warranty; This is free software,
and you are welcome to redistribute it under certain conditions:
GNU GPL v3 License: http://www.gnu.org/licenses/gpl.html

Usage:
 -h, --help             display this text
 -v, --verbose          verbose output
 -d, --debug            debug output
 -s, --size             size of EEPROM {24c32|24c64}
 -e, --erase            erase EEPROM (fill with 0xff)
 -w, --write &lt;filename&gt; write EEPROM with image from filename
 -r, --read  &lt;filename&gt; read EEPROM and save image to filename

Example:  ch341eeprom -v -s 24c64 -w bootrom.bin
</pre>
<br /><h1 id="flashrom_spi">flashrom SPI</h1>
<p>
Not needed anymore, included in mainline flashrom</p>
<pre>
git clone https://github.com/urjaman/flashrom/
git checkout -b origin/ch341a origin/ch341a

dpavlin@nuc:/nuc/flashrom$ sudo apt-get install pciutils-dev


</pre>
<br /><h1 id="linux_kernel_spi_module">linux kernel spi module</h1>
<pre>
dpavlin@nuc:/nuc$ git clone https://github.com/gschorcht/spi-ch341-usb.git
Cloning into 'spi-ch341-usb'...
remote: Counting objects: 63, done.
remote: Total 63 (delta 0), reused 0 (delta 0), pack-reused 63
Unpacking objects: 100% (63/63), done.
dpavlin@nuc:/nuc$ cd spi-ch341-usb
dpavlin@nuc:/nuc/spi-ch341-usb$ make
make -C /usr/src/linux-headers-4.14.0-3-amd64/ M=/nuc/spi-ch341-usb  modules
make[1]: Entering directory '/usr/src/linux-headers-4.14.0-3-amd64'
  CC [M]  /nuc/spi-ch341-usb/spi-ch341-usb.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /nuc/spi-ch341-usb/spi-ch341-usb.mod.o
  LD [M]  /nuc/spi-ch341-usb/spi-ch341-usb.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.14.0-3-amd64'
dpavlin@nuc:/nuc/spi-ch341-usb$ 
dpavlin@nuc:/nuc/spi-ch341-usb$ sudo make install
[sudo] password for dpavlin: 

dpavlin@nuc:/nuc/spi-ch341-usb$ sudo modprobe spi-ch341-usb

[525021.048281] spi-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output cs0 SPI slave with cs=0
[525021.048285] spi-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output cs1 SPI slave with cs=1
[525021.048287] spi-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output cs2 SPI slave with cs=2
[525021.048290] spi-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio4 gpio=0 irq=0 (hwirq)
[525021.048292] spi-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio5 gpio=1 irq=1 
[525021.048296] spi-ch341-usb 2-2.1.4:1.0: ch341_spi_probe: SPI master connected to SPI bus 0
[525021.048426] spi-ch341-usb 2-2.1.4:1.0: ch341_spi_probe: SPI device /dev/spidev0.0 created
[525021.048516] spi-ch341-usb 2-2.1.4:1.0: ch341_spi_probe: SPI device /dev/spidev0.1 created
[525021.048596] spi-ch341-usb 2-2.1.4:1.0: ch341_spi_probe: SPI device /dev/spidev0.2 created
[525021.049147] spi-ch341-usb 2-2.1.4:1.0: ch341_usb_probe: connected
[525021.049194] usbcore: registered new interface driver spi-ch341-usb


</pre>
<br /><h1 id="linux_kernel_i2c_module">linux kernel i2c module</h1>
<ul>
<li><a target="_blank" title="(external link)" href="https://github.com/gschorcht/i2c-ch341-usb">https://github.com/gschorcht/i2c-ch341-usb</a></li>
</ul>
<pre>
root@nuc:/nuc# git clone https://github.com/gschorcht/i2c-ch341-usb.git
Cloning into 'i2c-ch341-usb'...
remote: Counting objects: 39, done.
remote: Total 39 (delta 0), reused 0 (delta 0), pack-reused 39
Unpacking objects: 100% (39/39), done.
root@nuc:/nuc# cd i2c-ch341-usb
root@nuc:/nuc/i2c-ch341-usb# make
make -C /usr/src/linux-headers-4.14.0-3-amd64/ M=/nuc/i2c-ch341-usb  modules
make[1]: Entering directory '/usr/src/linux-headers-4.14.0-3-amd64'
  CC [M]  /nuc/i2c-ch341-usb/i2c-ch341-usb.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /nuc/i2c-ch341-usb/i2c-ch341-usb.mod.o
  LD [M]  /nuc/i2c-ch341-usb/i2c-ch341-usb.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.14.0-3-amd64'
root@nuc:/nuc/i2c-ch341-usb# 
root@nuc:/nuc/i2c-ch341-usb# sudo make install

root@nuc:/nuc/i2c-ch341-usb# modprobe i2c-ch341-usb

[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output gpio0 gpio=0 irq=0 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output gpio1 gpio=1 irq=1 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output gpio2 gpio=2 irq=2 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: output gpio3 gpio=3 irq=3 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio4 gpio=4 irq=4 (hwirq)
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio5 gpio=5 irq=5 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio6 gpio=6 irq=6 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_cfg_probe: input  gpio7 gpio=7 irq=7 
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_i2c_probe: created i2c device /dev/i2c-8
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_i2c_set_speed: Change i2c bus speed to 100 kbps
[Wed Feb  7 16:37:00 2018] i2c-ch341-usb 2-2.1.4:1.0: ch341_usb_probe: connected
[Wed Feb  7 16:37:00 2018] usbcore: registered new interface driver i2c-ch341-usb





</pre>
<br /><h1 id="schematics_and_info">schematics and info</h1>
<ul>
<li><a target="_blank" title="(external link)" href="http://onetransistor.blogspot.hr/2017/08/ch341a-mini-programmer-schematic.html">http://onetransistor.blogspot.hr/2017/08/ch341a-mini-programmer-schematic.html</a></li>
<li><a target="_blank" title="(external link)" href="http://www.zoobab.com/ch341-usb-spi-i2c-uart-isp-dongle">http://www.zoobab.com/ch341-usb-spi-i2c-uart-isp-dongle</a></li>
</ul>
<p>
I added soic 8 pinout over zif socket, because position of pin 1 is not obvious (or clearly marked anywhere on top). I suggest that you fix that with silver sharpy.</p>
<span class="nlw_phrase"><img alt="ch341a_miniprogrammer_schematic.png" src="https://saturn.ffzg.hr/rot13/index.cgi/ch341a_miniprogrammer_schematic.png?action=attachments_download;page_name=ch341a_mini_flash_programmer;id=20180604164314-0-11639" /><!-- wiki: {image: ch341a_miniprogrammer_schematic.png} --></span><br /><br /><h1 id="alternative_schematics">alternative schematics</h1>
<p>
<a target="_blank" title="(external link)" href="https://github.com/Upcycle-Electronics/CH341A-Pro">https://github.com/Upcycle-Electronics/CH341A-Pro</a></p>
<span class="nlw_phrase"><a href="https://saturn.ffzg.hr/rot13/index.cgi/ch341Apro_schematicV01.pdf?action=attachments_download;page_name=ch341a_mini_flash_programmer;id=20210814111740-0-4521">ch341Apro_schematicV01.pdf</a><!-- wiki: {file: ch341Apro_schematicV01.pdf} --></span><br /></div>
<hr/><div>Attachments: ch341a_miniprogrammer.jpg, ch341a_miniprogrammer_schematic.png, ch341Apro_schematicV01.pdf, CHM341A-3V3-fix.jpg</div>]]></description>
<author>Dobrica Pavlinu&#x161;i&#x107;</author>
<category>eeprom</category>
<guid isPermaLink="true">https://saturn.ffzg.hr/rot13/index.cgi?ch341a_mini_flash_programmer</guid>
<pubDate>Sat, 14 Aug 2021 11:18:00 -0000</pubDate>
</item>
</channel>
</rss>