Author Topic: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)  (Read 23763 times)

0 Members and 2 Guests are viewing this topic.

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Another MCU drama, soon I'll be needing more PIC16LF18323 but they have 1 year delay!
Also they're starting to get expensive for what they are.

For the same price I can get the STM32F030C6 for $0.56 or the  STM32F103C6 for $0.75, but they consume way more than the PIC (2mA at 32MHz).

I need the low consumption because I'm studying the possibility of removing external power requirement and directly feeding from the logic signals, this interfaces old electronics, each device pin has a 680R pullup to 5V, and there're at least 4 inactive pins at any given time, so 1mA*(680/4)=0.17V drop per mA, there's some room for a low power mcu, I should be able to load 3-4mA without causing inputs to be read as 0.

Another visit to lcsc showed this cheap $0.25 Cortex-M0 HK32F030MF4P6, but damn, chinese datasheet again.
Clicking at the English link at https://www.hsxp-hk.com did nothing, but I wondered if https://en.hsxp-hk.com existed.
To my surprise it did, and I was able to get the HK32F030M English datasheet.

Quick links:

- CubeIDE Patch adding support for several devices, including HK32F030M.
- HK32 folder with docs and CubeIDE sample project. Patch must be applied before attempting to open this project, otherwise CubeIDE will crash.
- Flash config bits issues and fix.
- EXTI issues and fix.
- Overclocking.

Edit: Fix PCB:
- Missing GND trace for CH340E !!
- CH340E RTS/DTR not working as expected, remove them.
« Last Edit: March 14, 2024, 11:34:47 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline thm_w

  • Super Contributor
  • ***
  • Posts: 7211
  • Country: ca
  • Non-expert
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #1 on: December 13, 2022, 10:21:33 pm »
Puya might make them too https://www.eevblog.com/forum/microcontrollers/wch-$0-10-risc-v-mcu/msg4505176/#msg4505176

But wouldn't HK32F030 have similar or greater power use than the STM32F030?
47c from LCSC if you buy enough: https://www.lcsc.com/product-detail/Microcontroller-Units-MCUs-MPUs-SOCs_STMicroelectronics-STM32F030F4P6TR_C89040.html
32kB flash if needed. There is also the G series for a few cents more, which uses less power.

Honestly from the application you are describing, to me it doesn't make sense to try to penny pinch to this level.
Profile -> Modify profile -> Look and Layout ->  Don't show users' signatures
 

Online PCB.Wiz

  • Super Contributor
  • ***
  • Posts: 1915
  • Country: au
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #2 on: December 13, 2022, 10:44:49 pm »
Another MCU drama, soon I'll be needing more PIC16LF18323 but they have 1 year delay!
Also they're starting to get expensive for what they are.
...
I need the low consumption because I'm studying the possibility of removing external power requirement and directly feeding from the logic signals, this interfaces old electronics, each device pin has a 680R pullup to 5V, and there're at least 4 inactive pins at any given time, so 1mA*(680/4)=0.17V drop per mA, there's some room for a low power mcu, I should be able to load 3-4mA without causing inputs to be read as 0.
If you want phantom / higher resistance power source, you may want to check the RESET current consumption of your MCU ?

Nuvoton have a new part designed for higher impedance power sources, where startup matters
https://www.nuvoton.com/products/microcontrollers/8bit-8051-mcus/low-power-mug51-series/mug51tb9ae/

I also spotted the XM003/XM004 series parts appear to specify a peak Icc during power up too.

https://www.lcsc.com/search?q=XM00
 

Offline woofy

  • Frequent Contributor
  • **
  • Posts: 370
  • Country: gb
    • Woofys Place
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #3 on: December 13, 2022, 11:01:53 pm »
Another MCU drama, soon I'll be needing more PIC16LF18323 but they have 1 year delay!

If the variant is OK, Mouser have over 6k in stock.
https://www.mouser.co.uk/ProductDetail/Microchip-Technology-Atmel/PIC16LF18323-I-SL?qs=PQDAUpz3sUPfUYfJi7oGkw%3D%3D

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #4 on: December 13, 2022, 11:15:45 pm »
The topic was mostly "Another cheap chinese MCU" and "There's english datasheet!".

I know Mouser have them, it's in the last resort option, the problem with them is their expensive shipping.
I always bought from RS because it's 5€, but Mouser wants 20!

Nah, the peak consumption is not a problem, inputs won't care for a logic "0" unless it stays there for several milliseconds.
It's the continuous running power what
What can't be is 25ma all the time!
« Last Edit: December 15, 2022, 08:25:56 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Online PCB.Wiz

  • Super Contributor
  • ***
  • Posts: 1915
  • Country: au
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #5 on: December 13, 2022, 11:28:39 pm »
Nah, the peak consumption is not a problem, inputs won't care for a logic "0" unless it stays there for several milliseconds.
You miss the key point - the MCU needs to not draw too much power, during the reset phase to ensure the power supply can be high enough to start reliably, when fed from a series resistor type source.
ie there will be some series resistor value, above which, the MCU will not start.

Once the MCU is started ok, you can select CLOCK dividers and modes, but during reset you have no control at all.
 

Offline thm_w

  • Super Contributor
  • ***
  • Posts: 7211
  • Country: ca
  • Non-expert
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #6 on: December 13, 2022, 11:35:32 pm »
Yeah the english datasheet is interesting.
I personally would not use it at the momemt, as stm32f030f4p6 gets me 32kB, and almost certainly this one only has 16kB without hidden flash.

But you were right:

HK32F030
Quote
Typical operating current
◦ Run mode: 2.3mA@32 MHz@3.3V (71 μA/MHz)
◦ Sleep mode:1.2mA@32 MHz@3.3V (37 μA/MHz), wake-up time: 21 ns
◦ Deep Sleep mode:0.61mA@114 kHz@3.3V, wake-up time: 7.8 μs
◦ Stop mode:30μA@3.3V, wake-up time: 10 μs (woken up by an external pin or an internal timer)

Its a big improvement in the F030 which is 10-20mA in the datasheet.

They also have a SOIC8 package: https://www.lcsc.com/product-detail/Microcontroller-Units-MCUs-MPUs-SOCs_HK-HK32F030MJ4M6_C907709.html
Profile -> Modify profile -> Look and Layout ->  Don't show users' signatures
 

Online PCB.Wiz

  • Super Contributor
  • ***
  • Posts: 1915
  • Country: au
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #7 on: December 13, 2022, 11:58:59 pm »
To my surprise it did, and I was able to get the HK32F030M English datasheet.

Hmm.. That's only a 3.3V rated part, to power from 5V logic pullups, you really need a wide Vcc part. (eg 1.8~5.5V)
I'm surprised anyone releases a small MCU these days with narrow Vcc, it really limits the market.
 

Offline thm_w

  • Super Contributor
  • ***
  • Posts: 7211
  • Country: ca
  • Non-expert
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #8 on: December 14, 2022, 12:44:15 am »
Hmm.. That's only a 3.3V rated part, to power from 5V logic pullups, you really need a wide Vcc part. (eg 1.8~5.5V)
I'm surprised anyone releases a small MCU these days with narrow Vcc, it really limits the market.

I mean wider is nicer, especially if OP is going to interface at 5V, but if not is it that different than adding a few cent LDO?
https://www.lcsc.com/product-detail/_LR-_C914128.html
Profile -> Modify profile -> Look and Layout ->  Don't show users' signatures
 
The following users thanked this post: I wanted a rude username

Online PCB.Wiz

  • Super Contributor
  • ***
  • Posts: 1915
  • Country: au
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #9 on: December 14, 2022, 01:38:53 am »
Hmm.. That's only a 3.3V rated part, to power from 5V logic pullups, you really need a wide Vcc part. (eg 1.8~5.5V)
I'm surprised anyone releases a small MCU these days with narrow Vcc, it really limits the market.

I mean wider is nicer, especially if OP is going to interface at 5V, but if not is it that different than adding a few cent LDO?
https://www.lcsc.com/product-detail/_LR-_C914128.html

Sure, you can add parts, for more cost and area, and add engineering time (and even more parts?) to check that 3v3 really does stay at 3v3 when those pullups are trying to pull things up to 5V (few LDOs can sink current), plus ensure the pin ratings are ever exceeded in all combinations of startup and brownout ....

I was surprised as the other recently released, low pin count MCUs I've looked at, are all wide Vcc

eg
XM004       Fuman    2.0~5.5V
APM32F003 Geehy    2.0~5.5V
CW32F003F4U7   CW 1.65V~5.5V

 
The following users thanked this post: thm_w

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #10 on: December 14, 2022, 02:25:41 am »
Sure, there're lots of other mcus available. Those you listed are 2-3x more expensive, some way less powerful.

Powering from 5V pins doesn't mean it's just 3 wires flying around in the air, of course there's a proper ldo!

I'm using a uln2003v12 (MOSFET version) to interface the pins, lower conduction voltage (Darlington won't go below 0.7V) and almost zero driving current.
Every source has a very convenient diode to a common pin for inductive load protection, which in this case I'll be using to feed the ldo.

Anyways the main power will come from a USB-C plug, however I'm trying this power scheme on this iteration.
The devices using this connection vary a lot, so I'll try to lower the power as much as possible (And detect external power, cutting features, like blinking the LED on activity), trying to provide this functionality as plus, but might not work with all, so the instructions will clearly state this and advice to use the USB power if not working.
I think a 10uF capacitor + power-on reset delay should be enough, but this all will be tested when the PCBs arrive.

These cheaps xx32F030 are very attractive, I might buy a few and try to program them.

By the way, a picture of the thing in a earlier prototype.
Yeah most of the stuff is hidden under the button and at the bottom layer.
« Last Edit: December 15, 2022, 08:27:14 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB, 2KB)
« Reply #11 on: December 14, 2022, 03:39:37 am »
Something that always annoyed me was the fact all Chinese makers only supplied Keil cmsis-pack (DFP format).

I discovered this plugin for Eclipse:
https://github.com/ARM-software/cmsis-pack-eclipse

Libraries can be taken from here:
https://github.com/IOsetting/hk32f030m-template

Will give it a try!
« Last Edit: December 14, 2022, 04:03:23 am by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM )
« Reply #12 on: December 14, 2022, 05:16:49 pm »
Finally I bit the bullet and bought 25 chips for $7.48, ST/Microchip parts would've been not less than 3x that, so I'm fine with the adventure even if I don't get it working at the end.

It seems these chips actually have 4KB SRAM, which is also reflected in the Linker script! Tested, yes, 4KB!
This device seems to be a lower-clocked HK32F0301M ?
Well, the CMSIS-Pack plugin was pretty useless. Also, installing it into CubeIDE will break everything.
But there was hope of making it work using the  hk32f030m template.

Which was suprisingly easy!
It's great to have all the good stuff from the IDE like Syntax highlighting, Stack analyzer, Code completion/Declaration dialogs...
So I made a basic project, the included libs are very similar to ST's LL lib.
The selected MCU was set to STM32F030F4Px so it selects the correct architecture (-mcpu=cortex-m0), but uses no ST code at all.
Takes the included toolchain "GNU Tools for STM32 compiler" which is gcc-arm-none-eabi with some ST's tweaks.

The MCU target is easily changed by declaring HK32F030MJ4M6 / HK32F030MD4P6 / HK32F030MF4P6 / HK32F030MF4U6 in the preprocessor tags (Currently set to HK32F030MF4P6).

So, it only takes installing the IDE and importing the project. I love simple setups!

Yet to see if it debugs nicely with a DIY Bluepill J-Link OB.
Edit: It seems it will, current J-Link software included in CubeIDE already supports this devices:


It only requires to properly set the Device field when creating a launch profile:


Edit: Create Google Drive folder:
- Google-translated RM, English datasheet.
- HK32F030M project for STM32 CubeIDE.
- Original library.
Download.

Trying to import this project in a non-patched IDE will cause all sort of errors, it's asking for a non-existing MCU, so it goes completely nuts ! :-DD
« Last Edit: May 24, 2023, 09:30:04 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 
The following users thanked this post: paf, thm_w, PCB.Wiz, Davor

Offline thm_w

  • Super Contributor
  • ***
  • Posts: 7211
  • Country: ca
  • Non-expert
Re: $0.25 HK32F030M (Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM )
« Reply #13 on: December 15, 2022, 12:06:39 am »
Finally I bit the bullet and bought 25 chips for $7.48, ST/Microchip parts would've been not less than 3x that, so I'm fine with the adventure even if I don't get it working at the end.

Its cool you are doing this, but, its not that big of a difference. 25 STM32F030's from LCSC or G030's from alix would be $16.

Jlink seems to be on top of things: https://www.segger.com/supported-devices/search/32f030 APM is there as well, wow.
Profile -> Modify profile -> Look and Layout ->  Don't show users' signatures
 

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM
« Reply #14 on: December 15, 2022, 12:19:06 am »
Yeah, but where would be the fun then?
25 cents is crazy for a CM0 MCU! 16KB is plenty for simple stuff.
If it works as expected, I might buy more for the future.
I mean: I won't tell if it worked!
Otherwise everyone is going to hype and buy them all ;)

Edit: another reason to buy is the extreme low power, 2mA@32MHz (Or 500uA@8MHz).
ST doesn't get even close!
Of course it could be BS or non-realistic testing (Like turning everything off except cpu).
« Last Edit: December 15, 2022, 02:04:24 am by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 
The following users thanked this post: thm_w, retiredfeline, tellurium

Offline tellurium

  • Frequent Contributor
  • **
  • Posts: 274
  • Country: ua
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM
« Reply #15 on: December 15, 2022, 08:53:07 pm »
I mean: I won't tell if it worked!
Otherwise everyone is going to hype and buy them all ;)

If you keep silent, we'll know it worked...
Open source embedded network library https://github.com/cesanta/mongoose
TCP/IP stack + TLS1.3 + HTTP/WebSocket/MQTT in a single file
 
The following users thanked this post: DavidAlfa

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM
« Reply #16 on: December 30, 2022, 04:42:02 pm »
The tiny HK32 arrived!

Edit: It turns out all the issues were caused because pins 1 & 2 had a very hidden solder bridge.
Pin 2 is SWD, so very weird stuff was happening!

JLink:
It always detects the HK32F030M as read/write protected...
I can read the flash anyways ???, containing random data, also the RDP bits at 0x1FFFF800, containing "AA 55" ....
The User Manual states that this value is level 0 protection (No protection), so I guess Segger messed it up.
As I was always getting a dialog asking to remove these bits, I ended checking "Remember selected action" and clicking "NO", problem gone!
It debugs, programs, everything works, so it's just a minor issue.

And itt definitely has 4KB RAM! Perhabs only 2KB tested, can't tell.
I filled it entirely, the contents were correct!

I'm using DIY JLink and STM32 CubeIDE (Requires patching to bypass verification check).

It's working great!

Additonally I found this useful doc at Github:
https://github.com/gbm-ii/HK32F030

VCAP pin is actually fully usable, it's PD7!
They did some terrible job in the pinout drawing, but it's later described in the GPIO functions as "VCAP/PD7", seems they copied a lot from other datasheets.
« Last Edit: December 31, 2022, 03:28:33 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 
The following users thanked this post: thm_w, PCB.Wiz

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #17 on: December 31, 2022, 05:17:00 pm »
I'm almost finished porting the code from the PIC, only some IO toggling and LED PWM remains.
For debugging purposes, I added u8g2, interfaced a small OLED, I'm also using itoa() which adds another 4%...
And it's still using almost half of the flash the PIC did!
Both compiled optimizing for size!

It's not like a STM32H7 series, but I'm definitely buying more for everyday low-requirement projects!
Adding how much I hate MPLABX and the extremely slow and buggy Pickit3... not a hard transition!  ;)
« Last Edit: December 31, 2022, 05:19:29 pm by DavidAlfa »
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline voltsandjolts

  • Supporter
  • ****
  • Posts: 2452
  • Country: gb
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB (4KB?) RAM
« Reply #18 on: January 01, 2023, 04:03:15 pm »
extreme low power, 2mA@32MHz (Or 500uA@8MHz).
ST doesn't get even close!
Of course it could be BS or non-realistic testing (Like turning everything off except cpu).

2mA@32MHz ?  :popcorn:
 

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #19 on: January 01, 2023, 05:14:53 pm »
From the datasheet. Nothing about the testing conditions, assume all peripherals disabled.
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline ralphd

  • Frequent Contributor
  • **
  • Posts: 445
  • Country: ca
    • Nerd Ralph
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #20 on: January 01, 2023, 05:34:03 pm »
I hacked around with these 2 years ago but could only write code to RAM (and noticed it is 4 kB as you did).  I couldn't figure out the flash write process.
http://nerdralph.blogspot.com/2021/01/trying-to-test-ten-cent-tiny-arm-m0-mcu.html

I don't have a JLink.  I built a CMSIS-DAP SWD dongle using a CH551, which works fine with STM32 & GD32.  If someone else can figure out how to flash this with OpenOCD or PyOCD, I'll give it another shot.
Unthinking respect for authority is the greatest enemy of truth. Einstein
 
The following users thanked this post: willmore

Offline voltsandjolts

  • Supporter
  • ****
  • Posts: 2452
  • Country: gb
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #21 on: January 01, 2023, 06:03:53 pm »
From the datasheet. Nothing about the testing conditions, assume all peripherals disabled.

Sorry, I wasn't clear. I meant in your own hardware tests, are you seeing results that tie up with datasheet figures?
 

Offline IOsetting

  • Regular Contributor
  • *
  • Posts: 62
  • Country: cn
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #22 on: January 02, 2023, 02:29:54 am »
I hacked around with these 2 years ago but could only write code to RAM (and noticed it is 4 kB as you did).  I couldn't figure out the flash write process.
http://nerdralph.blogspot.com/2021/01/trying-to-test-ten-cent-tiny-arm-m0-mcu.html

I don't have a JLink.  I built a CMSIS-DAP SWD dongle using a CH551, which works fine with STM32 & GD32.  If someone else can figure out how to flash this with OpenOCD or PyOCD, I'll give it another shot.
Hi Ralph, your blog is helpful, I didn't know the 4KB RAM size till reading your blog. For flashing this chip, you can use PyOCD with HK32F0303M's DFP pack. I have tested it with ST-LINK V2 and DAPLink(not a CH551 one), both works.
 
The following users thanked this post: ralphd

Offline DavidAlfaTopic starter

  • Super Contributor
  • ***
  • Posts: 6266
  • Country: es
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #23 on: January 02, 2023, 08:34:53 am »
From the datasheet. Nothing about the testing conditions, assume all peripherals disabled.

Sorry, I wasn't clear. I meant in your own hardware tests, are you seeing results that tie up with datasheet figures?

Not measured yet.
Hantek DSO2x1x            Drive        FAQ          DON'T BUY HANTEK! (Aka HALF-MADE)
Stm32 Soldering FW      Forum      Github      Donate
 

Offline ralphd

  • Frequent Contributor
  • **
  • Posts: 445
  • Country: ca
    • Nerd Ralph
Re: $0.25 HK32F030M - Cortex-M0, 32MHz, 16KB flash, 2KB RAM (Actually 4KB!)
« Reply #24 on: January 02, 2023, 10:03:35 pm »
Hi Ralph, your blog is helpful, I didn't know the 4KB RAM size till reading your blog. For flashing this chip, you can use PyOCD with HK32F0303M's DFP pack. I have tested it with ST-LINK V2 and DAPLink(not a CH551 one), both works.

Glad you got a working DFP.  I'll give it a whirl.
Unthinking respect for authority is the greatest enemy of truth. Einstein
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf