Almost two years ago, we announced our plans to build TinyCLR OS. There has been lot of excitement and hard work since then. Thanks to the feedback from our community and commercial customers, we have defined and refined the plan. This release is the first preview of the final release of that plan. Our goal is still to have TinyCLR running in commercial products before the end of the year – while keeping in mind our priority of a quality product versus getting it out and into your hands as soon as possible.
In this release we did a review of a lot of TinyCLR and as a result we performed quite a bit of reorganization and cleanup to get stuff ready for 1.0 and beyond. Many of the device APIs changed around in various amounts as part of this (particularly UART which was greatly simplified). These changes should make them simpler to use all around – from the end application to porting. Given the scale of the changes we do expect a few more bugs to pop up in this release.
We’re also now hosting the packages on NuGet and the VSIX on the Visual Studio Marketplace! This makes staying up to date even easier as there are fewer parts to manually download. After the initial install, everything except TinyCLR Config can be kept up-to-date using Visual Studio and TinyCLR Config. Take a look at the release notes for full details. (The extension is still making its way through the marketplace approval process, so expect it to appear soon.)
My G30, G80 and FEZ are update with TinyCLR OS 1.0 preview . I modified configuration code for SPI because FromId was deleted. I tested on Adafruit Display Shield
using System;
using System.Collections;
using System.Text;
using System.Threading;
using GHIElectronics.TinyCLR.Devices.Spi;
using GHIElectronics.TinyCLR.Pins;
class Program
{
static void Main()
{
var settings = new SpiConnectionSettings(FEZ.GpioPin.D8) // the slave's select pin
{
Mode = SpiMode.Mode1,
ClockFrequency = 4 * 1000 * 1000, //4Mhz
DataBitLength = 8,
};
SpiController ctrlSpi = SpiController.FromName(FEZ.SpiBus.Spi1);
var device = ctrlSpi.GetDevice(settings);
device.Write(new byte[] { 1, 2 }); // write something
device.TransferSequential(...) // this is good for reading registers
device.TransferFullDuplex(...) // this is the only one that trully represents how SPI works
}
}
Will you also publish more detailed documentation on how to fill scatter file and device.h content ?
Currently, the Quail has only 28KB total memory at startup, when it used to have something like 120Kb in the “good ol’ time” of NETMF So it obviously needs some tweaks in the scatter file.
Following the journey over the years, GHI have stewarded this extremely well!
Its exciting to see TinyCLR getting ready for 1.0 production release!
The Nuget packages and easy integration into VS2017 has been a joy!
TinyCLR-Config is easy, and works to deploy FW!!
It really is becoming quiet polished! And timing seems right too!
So well done to all!!! I Sure it has not been an easy task to pull off!
Not yet production release ! This is “just” a preview, but a good one it seems: tinyclr config is resizable, GetDirectories and GetFiles are functionnals, packages are smaller …
A lot of work is awaitng me now to update my packages, but all is right way.
Yes it is important to understand this. With this release, there will be no more major changes. We are only bug fixing going forward. We would love to see the “production release” before year end.
There were some complications around the vsix, we’re going to push back its appearance in the marketplace to the next release.
For software I2C (and SPI):
var provider = GHIElectronics.TinyCLR.Devices.I2c.Provider.I2cControllerSoftwareProvider(GpioController.GetDefault(), G80.GpioPin.PA0, G80.GpioPin.PA1);
var controller = I2cController.FromProvider(provider);
var device = controller.GetDevice(new I2cConnectionSettings(0xAA, I2cAddressFormat.SevenBit, I2cBusSpeed.StandardMode));
There is no direct replacement for DataReader and DataWriter.
You control the length of the pulse with the PulseLength property. It’s a TimeSpan, so you’ll want something like TimeSpan.FromTicks(100) (there are 100ns in a single tick).
Do keep in mind there are some known issues around PulseFeedback and software I2C.