M-SYSTEMS DiskOnChip Programming – Hardware & Software


For the past few months I have been working on a couple of projects involving Programming and interfacing the late 90’s era flash memory devices know as the DiskOnChip.  These devices were developed by the company M-SYSTEMS before they merged with Sandisk.

As many of you know these DiskOnChip components are essentially a Flash device that appears as a standard Hard drive by the connected PC system. (Hard drive Emulation).

This was made possible by M-SYSTEMS special “TrueFFS” software controller, which is essentially a custom Flash Management Algorithm that M-Systems developed and later Patented.

There are several methods of interfacing to these Flash devices for Programming and also booting off of…. to run an OS.  Many users have used either ISA Flash cards,  or SBC boards.  (Single Board Computers).


Since The M-SYSTEMS website has been shut down for some time now, many of the links online….. to various documents, or software for the DiskOnChip are no longer functional.  I also found that not many people knew much about them or those that do, were becoming few and far between.

I took it upon myself to create a page on my Website dedicated specifically for the DiskOnChip. I explain some of the basic requirements needed, in order to program these rare Flash devices.

I have posted several links to the many scattered M-SYSTEMS Applications Notes, User Manuals, schematic diagrams


and also links to various versions of the DOS based Programming Software/Drivers.


During my research, I managed to locate some library files from an Engineering “API” Software Package used with these DiskOnChip devices. The API package was referred to as the “BDK” or BOOT DEVELOPMENT KIT.
This allows you to develop and compile your own source code, into a custom stand alone .EXE or local Script to run some very specific DiskOnChip programming and configurations.
The .exe executable files were compiled using an early version of Borland C++ along with the API libraries. Pretty Cool!!

I have tons of info, pictures and download Links on this Page of mine.
Time permitting, I’ll try to include all that I’ve collected through my R&D work on these projects.  Some pretty neat findings.

Here is the Link to my Dedicated Page:

DiskOnChip Programming – Hardware & Software


Cheers! Folks,

Kind Regards,
Gerry O’Brien

DRIVING NKK “IS01PA001” LCD SmartDisplays with ATMEL [ATMEGA88PA] Micro-Controller


Lately I’ve been messing around with these Small mini LCD display units from the Company NKK. These units are referred to as “SmartDisplays” or “SmartSwitches”.

Shown below is one of NKK’s many SmartDisplay units. The IS01PA001 is a Monochrome display with a Dual LED backlight of Yellow and Green color.

NKK IS01PA001 SmartDisplay Datasheet PDF Link:  NKK_IS01PA001_Datasheet

NKK ISO1PA001 SmartDisplay
NKK ISO1PA001 SmartDisplay

There have been many guides and Magazine articles published on the subject of interfacing and driving graphics to these great little LCD displays. However I have not been able to find a Step-by-Step Tutorial to show Students how to use these units and provide the necessary introductions to at least get started. Most of the guides I found are targeted for professional level Engineers.

So in turn I have decided to compile my own Instructional Video series with a Step-by-Step Guide on how to Drive these units using an ATMEL micro-controller.

I used various Datasheets and other online guides and or Papers to get a working platform and the necessary code to implement the Serial data communications and control signals to drive some basic graphics.

ATMEL ATMEGA88PA Micro-controller Pinouts
ATMEL ATMEGA88PA Micro-controller Pinouts
ATMEL ATMEGA88PA driving an NKK SmartDisplay.
ATMEL ATMEGA88PA driving an NKK SmartDisplay.

I will be posting this Instructional Video series on my Youtube Channel. I will also provide a PDF Guide and the required micro-controller “C” Code on a devoted page on my Website very shortly for students to view and download.

So check back soon. Fun Stuff!!






Hi Folks,

Well I finally managed to figure this all out, and put together a Full instructional video. This video series that I have put together  explains the fundamental concepts and signal requirements for driving the HD44780 LCD display unit using the VHDL hardware description language.

The  VHDL code has been compiled to be used with the Altera Cyclone II FPGA on the Altera DE2 development board. However, you can modify the code slightly to port it to other development boards or FPGA’s and CPLD’s.

In the videos I review the signal requirements using actual waveform scans from a Logic Analyzer that show the Control and 8-bit databus signals used to drive the HD44780 display through its initialization sequence and then a character display sequence for printing a custom message onto the LCD screen.

The signals scanned are all generated by a VHDL source file programmed onto an Altera Cyclone II FPGA on the Altera DE2 development board.  This VHDL file produces a 32 character message to be displayed on the HD44780 LCD screen.

After reviewing the Waveform scans I briefly go over the VHDL code step by step to explain how it all works.

I will be providing a link to a devoted webpage on my Website for this project where I will provide further images and information and also extra links to other files such as the VHDL code source file for you to download. With this, you can try and create your own custom messages on an FPGA or CPLD board of your choosing.


Gerry O’Brien

HD44780 LCD Display Interfacing with Altera FPGA & VHDL

HD44780_LCD_DISPLAY_01My latest project involves programming an Altera Cyclone II FPGA for direct control over the popular HD44780 LCD Display controller.
I am using the ALTERA DE2 development board for testing and debugging my VHDL code as this board also uses the HD44780 LCDDisplay unit.
Altera_DE2Using VHDL, we’ll be able to encode various Finite State Machines which are used to produce the specific signal timing requirements to initialize the LCD.



HD44780_LCD_DISPLAY_Write-Signal_TimingOnce initialized, we can then send HEX information over its DATA_BUS to display various ASCII characters on the display area one character at a time depending on which State is shifted and thus placing a specific Binary sequence onto the LCD’s DATA_BUS logic vector.
-==== SEND the Letter “R” to Display =====-
LCD_DATA_BUS <= X”52″;      — This Hex code displays the letter R
EDIT: I have just posted a full Video Tutorial on my website for this project, and will soon have the written procedures and VHDL code posted. Check out the Blog Post link shown below to access the Instructional video.


You can also check out the Hitachi HD4478 LCD controller datasheet for more info on the signal control requirements and functional commands.
Fun Stuff!!


My Tektronix TLA715 Logic Analyzer with the TLA7PG2 Pulse Waveform Generator

This weekend I repaired a TLA7PG2  pulse waveform generator module for my Tektronix TLA715 Logic Analyzer mainframe. I was able to repair the unit due to the fact that I had one working module. There was an ALTERA MAX 7000 CPLD that was damaged and I was able to use the good module to duplicate the CPLD. (Luckily the Security-bit was not set) I duplicated the data to a new component for re-work.




100_7548As you can see in the images above, I now have (x5) different modules inserted into my TLA Expansion Box that interfaces to my Tektronix TLA715 Logic Analyzer Portable Mainframe.
I have the following Modules installed:
– (x1) TLA7E2 (4ch Digital Oscilloscope)
– (x2) TLA7N4 – with Option 7 installed   (136 Channel Logic Analyzer Module)
– (x2) TLA7PG2  (64 Channel Pulse Generator Module) with P6470 TTL Logic interfacing PODs.
With this setup, using different Triggers and various Waveform Patterns, I’ll be able to execute some sophisticated Test Benches on different CPLD/ FPGA or Micro-controller projects I’m working on. I  can then monitor the results on the Dual VGA Monitors that are interfaced to the LA Mainframe.
Below you can see the Tektronix issued “Probe cable” that connects the PODs to the Pulse Generator Module. This cable has the Tektronix Model# 012-1570-00. The cable is often mistaken for a 50-Pin SCSI cable, which it is NOT!!  This happened so often that it is even stated in the Modules User & Service Manuals.
If you decide to build your own cable, The Tektronix issued cable is a 50-pin Male to Male 
“Mini-D Ribbon” connector cable.  Or also known as an “MDR” cable.  The company 3M has a Connector cable model# 10350 which has the appropriate Male connectors.
You can also purchase the Male 3M Solder Plug Connectors directly from Newark.com at the link Below:



100_7557100_7552 TLA7PG2_P6470_POD_04 TLA7PG2_P6470_POD_03 TLA7PG2_P6470_POD_02 TLA7PG2_P6470_POD_01




NGPC_DATABUS_TEST_2 Overall I’m pretty excited to mess around with this Setup…
More info on My Tektronix Logic Analyzer system at the Link Below:
Fun Stuff!!!  : )


Ingersoll-Rand – INSIGHT “PFS2-G” DC Electric Torque Controller Repair

IR_INSIGHT_IC_PFS2G_046I recently acquired one of these Ingersoll-Rand – INSIGHT “PFS2-G” DC Electric Torque Controllers. I got the unit for $180 broken which was a steal as far as I’m concerned. These units cost around $13,000.00 new back in the day. (Late 90’s Early 2000)

I had to spend a significant amount of time repairing this unit, most of which was figuring out how the unit worked and the software/tools  I was going to need to do the Job.

Long Story Short…

I had to purchase an older Motherboard that was a Pull from a similar unit, and that had the Software still installed within the units memory chips. I Then had Download the data, Re-program a couple of EEPROM’s to get the software up and running again. Success !!

A nice little addition to my Electronics Lab!!   : )




You can Check out some more in depth details and photos of this repair on my Website at the Link below:




Learning to Program with ROS (Robot Operating System)

Hi Folks,

Just a quick post here about these two Books I found online that will give you a helping hand if you are trying to learn how to program using the ROS Software.

You can order them off of Amazon.com







SICK LMS-200 / LMS-291 LIDAR Laser Scanner RS-232 Interfacing with UBUNTU & R.O.S.

Ability to scan 180 Degrees. A motion control Jig must be built and calibrated to scan 360 Degrees.
Ability to scan 180 Degrees. A motion control Jig must be built and calibrated to scan 360 Degrees.
Setting up my newly repaired SICK LMS-200 LIDAR laser Scanner.
Setting up my newly repaired SICK LMS-200 LIDAR laser Scanner.

Join the SICK LASER SCANNERS Yahoo Group Today!!

If you are reading this because you have recently purchased a used SICK LMS Laser and are having some issues getting it to communicate over RS-232 or RS-422 then the info below may be of help to you.

EDIT: I recently received some very important info from a fellow User by the name of “Joe” who made several posts here on my Blog within the comments section regarding the LMS lasers being stuck in the RS-422 500k Baud rate mode and how he managed to reset it to RS-232 9600 Baud.




This seems to be a re-occurring issue for many users. I just wanted to add it directly here in my Original Post to save people some time locating this crucial info.

Here is a Quote from Joe’s Post:



The reason that all of our sensors are “stuck” in RS-422 500k mode is not some kind of failure, but because there is a message that can be sent to the laser to permanently change the default baud rate. If the default is set to 500k baud, then you have no way of changing it back unless you have an RS-422 cable.

For the RS-422 cable Pinouts: “In the quick start guide they have the positive terminals on the LMS side going to the negative terminals on the PC side, which is wrong – should be positive to positive, negative to negative. It’s a bit weird that I was able to receive data with the polarity reversed, but not transmit – my guess is that the adapter I have does not care for polarity when receiving.

Wire your cable according to the full manual (not the quick start guide – that diagram is wrong). If you’d like to reset it back to RS-232 mode, send the following commands from any decent serial terminal viewer program at 500000 baud:

$02 $00 $0A $00 $20 $00 $53 $49 $43 $4B $5F $4C $4D $53 $BE $C5

This command puts the laser into “installation mode” where you can adjust certain settings. Note that the chain: $53 $49 $43 $4B $5F $4C $4D $53 spells out SICK_LMS in ASCII which is the default password for SICK lasers. If the previous owner changed the password, then this won’t work.

Then send the following command:

$02 $00 $02 $00 $66 $00 $9C $4E

This command will set the default to 9600 baud.

If you’re having trouble, do a google search for “SICK LMS telegram listing” and you should find a document that describes what all the above commands mean (and much, much more).”

Thanks again for that info Joe. 🙂



Here are some additional Links to manuals and other ROS software related links to help you all get going using ROS:

Here is is the User’s manual for the SICK LMS-200:

I used the UBUNTU OS on my PC, I then installed The software package called ROS. This is the program that is used to make the system work.
You can find the documentation at this links Below:

I used a Plugin for the ROS software called “SICKTOOLBOX” for using SICK laser scanners specifically.
Here is the Link to this Plugin:

There is also a “Wrapper” / filter that the Plugin uses and that is available at the link below:

To make all of this Run within ROS software using the UBUNTU OS, You can check out this Tutorial page at the link below:

I hope this will help some of you.



As for My LMS Project:

I managed to find a “SICK” Brand LIDAR laser scanner on eBay.  I also bought a new  Laser face plate for it as the initial plate had some heavy duty scuffs and scratches from regular factory use.

I had to build a custom RS-232 interface and DC Power cable for the system. Pretty straight forward soldering work and then began the process of setting up the software interface.

After doing some research, I learned about the R.O.S. software package. ROS is  a very popular Linux based software platform used by many College and University Robotics Engineering programs. This software package is available free online. from ROS.org

I managed to configure the software and get the scanner data displayed in 2D as seen in the screen cap below. The plan will be to interface a motion controlled motorized base to mount the scanner to and then try to capture a 3D point Cloud. I realize this is not an easy task… but it will be fun to work at it. A descent challenge.

Fun Stuff!

More to come……….



UBUNTU installed running the ROS software package, with a special SICK-LMS200 Plugin.
UBUNTU installed running the ROS software package, with a special SICK-LMS200 Plugin.
SICK LMS sensor RS-232 & RS-422 Pinout and wiring diagram.
SICK LMS sensor RS-232 & RS-422 Pinout and wiring diagram.
DB9 Connector Pinouts for DC Power (24+ DC volts @ 2.5 Amps)  Sensor is able to use both RS-232 & RS-422 Serial Communication.
DB9 Connector Pinouts for DC Power (24+ DC volts @ 2.5 Amps)
Sensor is able to use both RS-232 & RS-422 Serial Communication.

CRS ROBOT ARM Custom Cable – EDAC to CPC connector

Building a custom cable for the CRS A250 robot arm.

The cable assembly was pretty straight forward. An EDAC connector interconnected to (2) CPC connectors.

EDAC connector for Robot Arm on the  SRS-M1A Controller.
EDAC connector for Robot Arm on the SRS-M1A Controller.
Solder Type Pins are used for all the Servo Motors and also Motor Encoder Feedback signals.
Solder Type Pins are used for all the Servo Motors and also Motor Encoder Feedback signals.
Heat shrink of course is a Must!
Heat shrink of course is a Must!
The EDAC connector then Interfaces to the A250 Robot Arm through 2 CPC connectors. One is for Robot Feedback signals and the second connector is for High Current Motor Power.
The EDAC connector then Interfaces to the A250 Robot Arm through 2 CPC connectors. One is for Robot Feedback signals and the second connector is for High Current Motor Power.

It was just a very time consuming job. Had to figure out the pin connections for both CPC connectors on the Robot and then match those up to the Pins on EDAC connector on the controller.

I had the pinout information fro the Controller using the Technical Manuals I had on file, I then only had to figure out what pins the Robot CPC connectors were. These were almost a perfect match to the pinouts for the A255 Robot which I had the Technical manuals for as well. There was only a few minor differences that had to be updated.

I managed to get it working and I then proceeded to manually move the robot around using straight “JOINT” commands in the ROBCOMM-II software. At this point I am having Homing errors for the Gripper.

I realize the solution is within the Controller settings menu. A small problem with the controller not properly identifying the number of Servo motors interfaced to the Controller.

For further details see the devoted “CRS-A250 Robot” page on my Website at the link below:




CRS Plus A250 Robot & SRS-M1A Controller calibration

CRSPlus Robot Controller
CRSPlus Robot Controller
CRSPlus Robot Controller Motor Driver cards.
CRSPlus Robot Controller Motor Driver cards.

Currently in the midst of calibrating the Motor Driver cards for the SRS-M1A controller. The Robot Arm motor Drivers seem to be responding correctly, however the Gripper Servo driver card seems to be causing some homing Errors. I believe the problem resides in the Controller settings menu. As the homing sequence should only involve 5 Motors devoted to the Robot Arm and then the Gripper is Homed. However the system seems to be attempting to home a 6th Motor.

Therefore I believe that by adjusting the controller settings within the Controllers Processor, the homing sequence should complete successfully.

More details to come………..